2012-04-05 33 views
1

我在想......为什么Regex集团正在退货?

当我写(JS)

var t="1234ABC4321".match(/.*(ABC).*/) 

返回:

["1234ABC4321", "ABC"] 

我可以(?:...)

然而,组更换, "ABC"]部分适用于:backreference,所以我可以在以后通过\1来引用它们。

问题:

为什么“ABC”作为匹配的一部分返回? 如果他自己需要它以供以后参考,fine!但不要保留在我的收藏!

是否有任何逻辑(我确定有)?

回答

2

逻辑是match()方法检查你的字符串是否与regexp匹配。如果是,则返回与正则表达式匹配的字符串部分。如果用()指定分组,它也会返回组。

如果您正在寻找从字符串使用删除ABC:

var t="1234ABC4321".replace(/ABC/, ""); 
3

我不确定我是否理解你的问题,但是在分组时,你得到的第一个组是正则表达式匹配的整个字符串。如果你不想获得第二组(ABC),请删除括号(()),因为它们表示正则表达式中的组,因此这个正则表达式:/.*ABC.*/应该产生1个组,其中1234ABC4321