与模式匹配且与特定单词不匹配的正则表达式

时间:2016-12-13 08:03:02

标签: javascript regex

我的基本javascript正则表达式包含至少包含一个字母的任何字符串:

^(.*[A-Za-z]+.*)+

现在我想更新这个正则表达式,以便它不会匹配以下单词:" n \ a"和"无"。包含它们是有效的,意思是" n \ aa"或" nn \ a"是有效的,只是与我不想要的单词完全匹配的单词将导致正则表达式不匹配。

我看到很多例子都没有包含特定字符串的单词,使用负面的后观,如

^(?!.*bar).*$

但是我无法将其转换为精确匹配。

1 个答案:

答案 0 :(得分:1)

(?!)实际上是一个负面的预测。但你说得对,这是正确的:

^(?!n\\a$)(?!none$)(.*[A-Za-z].*)

基本上,从开头(^)开始,我们希望确保直到结尾($)字符串不仅包含这两个字符串。

要使此不区分大小写,您只需添加i正则表达式标记:

'NONE'.match(/^(?!n\\a$)(?!none$)(.*[A-Za-z].*)/)  // => ["NONE", "NONE"]
'NONE'.match(/^(?!n\\a$)(?!none$)(.*[A-Za-z].*)/i) // => null

See it in action

另请注意,您的原始正则表达式并不需要+,因为匹配的正则表达式已确保至少存在一个。