2015-08-08 46 views
1

In continuation of a previous question I had:比賽的一切,但忽略特定單詞

所以我在一個情況下,我只能使用正則表達式來選擇一切,但一個特定的單詞。出於舉例的目的,這個詞將是'foobar'。這是應該發生的事情:

這個例子的原始正則表達式是/\W*\b(?!foobar).+?\b\W*/g

match_highlighted.png

與正則表達式的問題是,之類的東西foobartestfoobar1234用foobar的東西后,與foobar的一起忽略。這不是我想要的。 test1234不應該被忽略,但是起始foobar應該,它不應該排除整個單詞,因爲它不是正好 foobar。這種情況發生的唯一場景是foobarfoobar,它忽略了兩個預期的foobar。 一切其他應匹配毫無例外。

The supposed duplicate沒有完成我所要求的。

要注意的最後一件事是我不能使用向後看,只能向前看。有什麼方法可以實現我想要的嗎?謝謝!

+0

它怎麼樣都行不通? – Anonymous

+0

@匿名這給我一個「無限」的錯誤。爲了幫助,我正在網站上測試我的正則表達式http://regexr.com/ – Flipybitz

+0

如果使用完全像這樣,它不應該給出無限的錯誤,但是您是對的,它有問題。我可以發表一個答案,但我需要知道你首先使用哪種語言。對於誤解,我的不好。 – Anonymous

回答

1

JavaScript正則表達式根本不允許使用此功能。限制較少的語言允許丟棄匹配並繼續嘗試匹配正則表達式。但是,JavaScript不允許這樣做。因此,它不會跳過字符。它試圖匹配每一個。然而,理論上,如果支持向後看,那麼它仍然可能以複雜的方式出現,但它們都不是。

沒有這兩種可能性,沒有一種萬無一失的方法來確保正則表達式當前沒有嘗試在特定字符串中匹配。

+0

這很爛...謝謝你的幫助:) – Flipybitz

+0

沒問題,很高興我能幫上忙。 – Anonymous

+0

唯一的方法是使用交替並忽略操作數的左側。 https://regex101.com/r/rI5bH1/1 – hwnd