最新消息:网站改版咯

正则表达式中的小括号

ECMAScript Yovae 1359浏览

今天测试一段js代码,发现了一个问题,代码如下:

         var rgExp=/(^\D*[0-9])/;
	 var str="This is fun 01 stuff";
	 var result=str.match(rgExp);
	 document.writeln(result);

结果输出是:

This is fun 0,This is fun 0

如果换成如下代码:

         var rgExp=/^\D*[0-9]/;   //去掉了小括号
	 var str="This is fun 01 stuff";
	 var result=str.match(rgExp);
	 document.writeln(result);

结果输出是:

This is fun 0

加了小括号,为什么输出就多了出一条记录呢,我查了很多资料后发现,原来在正则表达式匹配中,括号匹配字符串,并记住匹配结果,匹配结果则保存在结果数组中,在第一段代码中输出两次This is fun 0,表示数组有两条记录,第一条是正则表达式的匹配,第二条记录是小括号中匹配的结果。如果小括号不是引用整个正则表达式而是表达式的一部分,如/(^\D)[0-9]/,那么执行结果就变成:

This is fun 0,This is fun 

只有括号引用的所匹配的字符串会被保存,所以要注意正则表达式中的括号的用法,不然可能会出现不可预料的结果。

转载请注明:Yovae Studio » 正则表达式中的小括号