compile( )
compile( ) 用来编译正则表达式,说白了就是为了让正则表达式的字符串起作用。
regExpObject.compile(pattern,modifiers);
*pattern:是一个字符串,用来指定正则表达式的模式
*modifiers:是一个可选的字符串,用来指定模式的修饰符(i、g 或 m)
例如:
var patt=/I am nice/g;
console.log(patt); //结果为 /I am nice/g
patt.compile('here is nice blog','g'); //重新编译 patt 的正则表达式
console.log(patt); //结果为 /here is nice blog/g
注意:
1、compile() 目前已被弃用(从 JS version 1.5 起),这意味着这个方法可能在未来会被移除,所以不再推荐使用此方法
2、regExpObject.compile() 本质上与 new RegExp(pattern,modifiers) 是一样的,所以推荐使用 new RegExp(pattern,modifiers) 来替代 compile() 的使用,关于 RegExp 对象的声明请移步:正则表达式(RegExp)整理(二):正则表达式在JavaScript中的使用
var patt1=/here is nice blog/g;
patt1.compile('I am nice','g'); //通过 compile() 方法编译正则表达式
var patt2=new RegExp('I am nice','g'); //使用 new RegExp() 来编译正则表达式
console.log(patt1);
console.log(patt2); //此时 patt2 与 patt1 的结果都是一样的,都是 /I am nice/g
exec( )
exec( ) 用来返回字符串中的一个匹配项
regExpObject.exec(string);
注意:
1、exec() 返回一个 Array 类型的结果,但是返回一个 Array 并不意味着 exec() 返回了所有的匹配项,反而 exec() 每次只返回一个匹配项,如果没有匹配项的话则返回 null ,如下面的代码所示:
var content='abc123efg456';
//匹配连续的三个数字
var patt=/\d{3}/g;
//此时只返回匹配项 123 ,具体所返回的 Array 为 ["123", index: 3,input: "abc123efg456", groups: undefined]
console.log(patt.exec(content));
2、如果想通过 exec() 返回全部的匹配项的话,需要通过循环来使用 ,如下面的代码所示:
var content='abc123efg456';
//匹配连续的三个数字
var patt=/\d{3}/g;
var match;
//注意:在循环时,需要给正则表达式设置g修饰符,否则可能会出现死循环的状况
while((match=patt.exec(content))!=null)
console.log(match);
test( )
test( ) 用来匹配字符串中是否含有匹配项,如果存在的话就返回 true,否则返回 false
regExpObject.test(string);
注意:
1、test( ) 会改变 regExp 对象的 lastIndex 属性
var content='abc123efg456';
var patt=/\d{3}/g; //匹配连续的三个数字
console.log(patt.test(content)); //返回 true
console.log(patt.exec(content)); //匹配的是 456 ,因为在test()的影响下,patt的lastIndex属性已经改变
console.log(patt.test(content)); //返回 false
最后,希望这篇文章能带给你点启发,Have Fun!