下面几个例子,主要说明js匹配字符串match()和exec()方法带与不带全局标识g时输出结果的异同,需要注意的是exec() 带全局标识g时正则匹配输出结果最详细,但也略显麻烦。至于实际运用中选用下面哪种方法,取决于实际需求。
1.1 匹配字符match()方法,不带全局标识g:
[runcode]var str="at 1 b 2 c";
var patt=/([a-zA-Z])+/;
str.match(patt); //返回数组中,第0个元素:str中符合整个正则表达式的首个匹配到的子字符串,其余的元素依次存放的是与正则表达式的子表达式(括号部分)匹配的子字符串
[/runcode]
输出结果:
["at", "t"]
1.2 匹配字符match()方法,带全局标识g:
[runcode]
var str="at 1 b 2 c";
var patt=/([a-zA-Z])+/;
str.match(patt); //只输出str中符合整个正则表达式的所有匹配到的子字符串
[/runcode]
输出结果:
["at", "b", "c"]
2.1 正则exec()方法,不带全局标识g:
[runcode]
var str="at 1 b 2 c";
var patt=/([a-zA-Z])+/;
patt.exec(str); //不带全局标识g时,跟match()方法不带全局标识输出结果一样
[/runcode]
输出结果:
["at", "t"]
2.2 正则exec()方法,带全局标识g:
[runcode]
var str="at 1 b 2 c";
var patt=/([a-zA-Z])+/g;
var resultArr=[];
while((result=patt.exec(str))!=null){
console.log("lastIndex: "+patt.lastIndex);
resultArr.push(result);
//resultArr.splice(resultArr.length,0,result);
}
console.log(resultArr); //可以看成执行完“match()方法,不带全局标识g”后,再往后匹配,然后将结果依次拼成一数组输出
[/runcode]
输出结果:
[["at","t"],["b","b"],["c","c"]]