我想知道是否有可能排除一組中的比賽的部分內的子字符串。正則表達式:不包括組
我認爲/(foo((?:bar)|(bad)))/
結果匹配「foobar」或「foobad」和組1包含「foobar」或「foobad」。我希望它匹配「foobar」或「foobad」,但組1只包含「foo」或「foobad」。我知道(?:...)
正則表達式語法用於創建一個以後不能引用的組,但上面的用法意味着有3個組:\ 1整個匹配; \ 2無論是「酒吧」還是「壞」; \ NONE是一個未使用的組「酒吧」;和\ 3爲'壞'。
你看我要去哪裏嗎?我想有選擇地排除另一個組內的子組。
另外,我想在一個或時尚/(foobar)|(foobad)/
定義組1的兩倍,雖然我知道,輸入不會做我想要的。在這種情況下,如果輸入「foobad」,試圖訪問match[1]
會導致「未定義」錯誤。我知道這是因爲它實際上是拆分爲第1組和或組2
我在JavaScript正則表達式方言寫的。
好的答案。出於某種原因,我認爲JS不支持預測,但它確實如此,所以這會很好地工作。 (一旦parens匹配,無論如何;) – 2011-04-03 19:47:27
謝謝你的修正添:)。是的,JS支持前瞻,但不支持後視。 – 2011-04-03 19:49:18
應該指出,這將改變任何後續比賽的行爲。例如'(foo(?:(?= bar)| bad))x'將與foobadx匹配,但不匹配foobarx。 – 2011-04-03 19:55:51