正则表达式(RegExp)整理:JS 中 RegExp 对象的 compile()、exec() 与 test() 方法

AUTHOR | nicechi
类别 | 知识储备
发表 | 2020-02-15 10:38:48
更新 | 2020-08-05 21:25:22

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!


CATEGORY

TOP