学习正则表达式

来源:互联网 发布:策略限制网络 编辑:程序博客网 时间:2024/06/14 03:29


 

js正则exec()和test()的区别,RegExp.$1意义


[javascript] view plain copy
  1. var r = /(\d+)-(\w+)/;//RegExp.$1为第一个子匹配(表达式中括号的部分),最多是$99  
  2. var b=r.exec("2013-love-b");//返回整个匹配的字符串  
  3. alert(b+" "+RegExp.$1+"=="+RegExp.$2);  
  4.   
  5. b = r.test("1997-good");//返回是否存在满足匹配  
  6. alert(b+" "+RegExp.$1+"=="+RegExp.$2);  


上面弹出显示为:

2013-love,2013,love 2013==love

true 1997==good


关于RegExpObject.test(str)和rE.test(str)的区别

嗯,还有RegExpObject.test(str)只要str字符串有那个匹配的到的模式,就会返回真。而var rE=/^*$/的他的rE.test(str),一定要完全符合才行。


[javascript] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // 2012-12-12 12:12:12  
  2. var regex = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g;    
  3.   
  4. // true  
  5. alert(regex.test("2012-12-12 12:12:12"));  
  6.   
  7. // false              
  8. alert(regex.test("2012-12-12 12:12:12"));  


执行结果已经在代码注释里了,可以看到:对于同一个正则表达式对象regex,不能重复调用:第一次返回true,第二次就返回false,很显然这种效果不是我们想要的。这是因为RegExp.test()方法,第一次从位置0开始查找,可以匹配;第二次的查找位置就不是0了,说以就不能匹配了。


解决方式挺简单:每次都让test从第0个位置开始匹配就可以了:

[javascript] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // 2012-12-12 12:12:12  
  2. var regex = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g;    
  3.   
  4. // true  
  5. alert(regex.test("2012-12-12 12:12:12"));  
  6.   
  7. regex.lastIndex = 0;  
  8. // true           
  9. alert(regex.test("2012-12-12 12:12:12"));  

和java中的有一个Matcher matcher = pattern.matcher(str);matcher,find()中一样的










以后再来补充




0 0
原创粉丝点击