正则表达式匹配一个没有短语的短语

时间:2014-01-30 16:11:12

标签: javascript regex

我需要一个JavaScript正则表达式来匹配以下内容:

afoobar

foobars

afoobars

但不是确切的短语

foobar

到目前为止我所拥有的是:

^(?!foobar).*$

在其他帖子中找到,但这似乎与以下情况相符:

foobars

我觉得我很接近,但似乎无法弄明白要添加什么。

感谢您的帮助。


修改

感谢所有答案 - 我的问题并没有完全正确。我还需要正则表达式来匹配其他所有内容。所以它不应该需要" foobar"在它是一个匹配。但如果字符串是完全foobar,那么它不应该匹配。

5 个答案:

答案 0 :(得分:3)

一个简单的解决方案是这样的:

.*foobar.+|.+foobar.*

或更简单:

.foobar|foobar.

或者可能:

(?!^foobar$).*foobar

或者,如果您需要匹配包含foobar(但不是foobar本身)的任何单词,这些单词显示为较大字符串的一部分,您可以使用类似的内容(Demo) :

\b\w*foobar\w+\b|\b\w+foobar\w*\b

另请注意,如果您只是尝试匹配 foobar的任何字符串,请使用此字段:

(?!^foobar$)^.*$

或者更简单,只需测试您不想匹配的内容,并接受其他所有内容,如:

function notFoobar(input) { return 'foobar' !== input; }

答案 1 :(得分:0)

试试这个:^(?!foobar [s] * )。 $

答案 2 :(得分:0)

您可以使用:

^(?!.*?\bfoobar\b).*?foobar.*$

这将匹配afoobars但不匹配foobar

在线演示:http://regex101.com/r/wU9yB0

答案 3 :(得分:0)

以下是基于新要求的更新答案:

.+$(?<!^foobar)

这就是说,匹配所有东西一次或多次,包括行尾 - 除非你在你身后看,只看到foobar锚定到行的开头没有其他东西。

答案 4 :(得分:0)

简单的替换 - a?foobars|afoobars?