2011-10-06 53 views
4

我怎麼能寫測試一個正則表達式,如果字符串包含幾個子結構爲:JavaScript RegEx排除某些詞/短語?

"cake.xxx" 

其中xxx爲什麼,但不「奶酪」或「奶」或「黃油」。

例如:

  • "I have a cake.honey and cake.egg"應該返回true,但
  • "I have a cake.**milk** and cake.egg"應該返回false

回答

13

這是你想要的嗎?

^(?!.*cake\.(?:milk|butter)).*cake\.\w+.* 

看到它here on Regexr

這其中是否包含 「cake.XXX」,而不是當它的 「cake.milk」 或 「cake.butter」

.*cake\.\w+.*這完全匹配一行如果有「蛋糕」,部分將會匹配。隨後至少有一個wrod字符。

(?!.*cake\.(?:milk|butter))這是一種消極的先行,這將阻止如果字符串包含單詞之一,你不允許

^錨圖案到字符串的開頭

+0

我想知道爲什麼它是(?:牛奶)而不是(牛奶?)? –

+1

這只是一個非捕獲組,因爲'?:'。唯一的區別是匹配的字符串不存儲到變量中。 – stema

+0

這意味着我可以使用(牛奶),對吧?還有更多,是否需要在字符串開始標記「^」之後加上「負向預覽」規則? –

1

正則表達式匹配的字符(如*+?,並且{0})只適用於最後一個字符

你應該把這個詞或短語在non-matching group,像這樣:

(?:someWord){0}意味着someWord重複(存在)0次,沒有把它在你的比賽

(?!someWord)做同樣的事情


regex101是測試正則表達式良好的操場,看到擊穿