A-A+

JavaScript中的正则表达式

2016年01月28日 前端设计 暂无评论 阅读 4 views 次

在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp对象,也可以用JavaScript 1.2中的新添加的一个特殊语法来创建RegExp对象.

就像字符串直接量被定义为包含在引号内的字符一样,正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符.所以,JavaScript可能会包含如下的代码:

var pattern = /s$/;

这行代码创建一个新的RegExp对象,并将它赋给变量parttern.这个特殊的RegExp对象和所有以字母"s"结尾的字符串都匹配.用RegExp()也可以定义一个等价的正则表达式,代码如下:

var pattern = new RegExp("s$");

提示和注释

重要事项:不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性。

提示:如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0

示例,下面的例子举例说明了 test 方法的用法,代码如下:

  1. <script language=jscript>  
  2. function TestDemo(){  
  3.  try{               
  4. var re="abc"    
  5.  var s=/a/             
  6. //这里设正则表达式     
  7. alert(s.test(re)) //如果包含则返回真  
  8. }catch(e){alert("err")}  
  9. }  
  10. TestDemo()  
  11. </script>  

例,代码如下:

  1. <script type='text/javascript'>  
  2. var reTest = /^aid=(.*)/ig;  
  3. var aData = [ 'aid=^$', 'aid=^$', 'aid=^$', 'aid=^$' ];   
  4. for (var i=0, l=aData.length; i<l; i++) {  
  5.         reTest.lastIndex = 0;  
  6.      alert(reTest.test(aData[i]));  
  7. }  
  8. </script>  

这样,结果就对了~, 当然另外, moxie同学说的方法其实更有效, 既然你不需要g, 那何必设置g呢?代码如下:

  1. <script type='text/javascript'>  
  2. var reTest = /^aid=(.*)/i;  
  3.    
  4. var aData = [ 'aid=^$', 'aid=^$', 'aid=^$', 'aid=^$' ];  
  5.    
  6. for (var i=0, l=aData.length; i<l; i++) {  
  7.      alert(reTest.test(aData[i]));  
  8. }  
  9. </script>< li>  

实例代码如下:

  1. //test方法,测试字符串,符合模式时返回true,否则返回false  
  2. var re = /he/;//最简单的正则表达式,将匹配he这个单词  
  3. var str = "he";  
  4. alert(re.test(str));//true  
  5. str = "we";  
  6. alert(re.test(str));//false  
  7. str = "HE";  
  8. alert(re.test(str));//false,大写,如果要大小写都匹配可以指定i标志(i是ignoreCase或case-insensitive的表示)  
  9. re = /he/i;  
  10. alert(re.test(str));//true  
  11. str = "Certainly!He loves her!";  
  12. alert(re.test(str));//true,只要包含he(HE)就符合,如果要只是he或HE,不能有其它字符,则可使用^和$  
  13. re = /^he/i;//脱字符(^)代表字符开始位置  
  14. alert(re.test(str));//false,因为he不在str最开始  
  15. str = "He is a good boy!";  
  16. alert(re.test(str));//true,He是字符开始位置,还需要使用$  
  17. re = /^he$/i;//$表示字符结束位置  
  18. alert(re.test(str));//false  
  19. str = "He";  
  20. alert(re.test(str));//true  
  21. //当然,这样不能发现正则表达式有多强大,因为我们完全可以在上面的例子中使用==或indexOf  
  22. re = /s/;// s匹配任何空白字符,包括空格、制表符、换页符等等  
  23. str= "user Name";//用户名包含空格  
  24. alert(re.test(str));//true  
  25. str = "user  Name";//用户名包含制表符  
  26. alert(re.test(str));//true  
  27. re=/^[a-z]/i;//[]匹配指定范围内的任意字符,这里将匹配英文字母,不区分大小写  
  28. str="variableName";//变量名必须以字母开头  
  29. alert(re.test(str));//true  
  30. str="123abc";  
  31. alert(re.test(str));//false  

正则表达式的直接量字符

字符 匹配

________________________________

字母数字字符 自身

f 换页符

n 换行符

r 回车

t 制表符

v 垂直制表符

/ 一个 / 直接量

一个 直接量

. 一个 . 直接量

* 一个 * 直接量

+ 一个 + 直接量

? 一个 ? 直接量

| 一个 | 直接量

( 一个 ( 直接量

) 一个 ) 直接量

[ 一个 [ 直接量

] 一个 ] 直接量

{ 一个 { 直接量

} 一个 } 直接量

XXX 由十进制数 XXX 指 定的ASCII码字符

Xnn 由十六进制数 nn 指定的ASCII码字符

cX 控制字符^X. 例如, cI等价于 t, cJ等价于 n

字符 匹配

____________________________________________________

[...] 位于括号之内的任意字符

[^...] 不在括号之中的任意字符

. 除了换行符之外的任意字符,等价于[^n]

w 任何单字字符, 等价于[a-zA-Z0-9]

W 任何非单字字符,等价于[^a-zA-Z0-9]

s 任何空白符,等价于[ t n r f v]

S 任何非空白符,等价于[^ t n r f v]

d 任何数字,等价于[0-9]

D 除了数字之外的任何字符,等价于[^0-9]

[b] 一个退格直接量(特例)

字符 含义

__________________________________________________________________

{n, m} 匹配前一项至少n次,但是不能超过m次

{n, } 匹配前一项n次,或者多次

{n} 匹配前一项恰好n次

? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1}

+ 匹配前一项1次或多次,等价于{1,}

* 匹配前一项0次或多次.等价于{0,}

给我留言