2011-10-06 110 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是测试正则表达式良好的操场,看到击穿