2012-11-27 30 views

回答

5

我目前沒有解釋爲什麼它返回e,但.匹配任何字符和.{2,}基本上只是意味着「匹配任何兩個或多個字符」。

你想要的是匹配任何你捕獲組捕獲,通過反向引用:

/^(.+)\1+$/m 

我只是注意到,這也是你所鏈接的答案建議使用:/(.+)\1+/ 。表達式是完全一樣的,JavaScript沒有任何改變。

+0

由於'^'和'$'我想'^(。+){2,} $'應該匹配整個字符串。量詞的貪婪或懶惰可能可以解釋這種情況 - 但這對我來說似乎很奇怪。 但是你的解決方案是可以的。 (我誤解了Ruby的例子:我認爲它在一個替代語法中使用了一個量詞,而不是在JS中。) 謝謝! – levram

1

我認爲你爲什麼得到'e'的原因是{2,}意味着兩次或多次重複匹配前面的正則表達式,在這種情況下是(.+){2,}不保證重複匹配彼此,只有它們全部符合(.+)的匹配條件。

從我所看到的(使用Expresso),它看起來像第一場比賽到 (.+)是「SingleSingleSingl」(由於貪婪匹配)和第二場比賽是「E」。由於捕獲組只記住他們的最後一場比賽,這就是爲什麼replace()會讓你回到'e'。如果您使用(.+?)(對於非貪婪或不情願的匹配),每個單獨的角色都會匹配,但您仍然只會獲得最後一個角色'e'。

正如Felix提到的那樣,使用反向引用是我知道保證重複性彼此匹配的唯一方法。