2012-04-05 72 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