var r = /(\d+)-(\w+)/; var b=r.exec( "2013-love-b" ); alert(b+" " +RegExp.$1+ "==" +RegExp.$2); b = r.test("1997-good" ); 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),一定要完全符合才行。
var regex = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g; alert(regex.test("2012-12-12 12:12:12" )); alert(regex.test("2012-12-12 12:12:12" ));
执行结果已经在代码注释里了,可以看到:对于同一个正则表达式对象regex,不能重复调用:第一次返回true,第二次就返回false,很显然这种效果不是我们想要的。这是因为RegExp.test()方法,第一次从位置0开始查找,可以匹配;第二次的查找位置就不是0了,说以就不能匹配了。
解决方式挺简单:每次都让test从第0个位置开始匹配就可以了:
var regex = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g; alert(regex.test("2012-12-12 12:12:12" )); regex.lastIndex = 0; alert(regex.test("2012-12-12 12:12:12" ));
和java中的有一个M
atcher matcher = pattern.matcher(str);matcher,find()中一样的
以后再来补充