如何使用RegEx将特定值负匹配

时间:2015-08-19 15:11:10

标签: regex regex-negation

我希望使用(JavaScript)RegEx对特定值(让我们说42)进行否定匹配。

我知道如何积极匹配价值:

/^42$/.test(42); // true
/^42$/.test(43); // false
/^42$/.test(422); // false

我正在寻找相反的结果:

/somemagic/.test(42); // false
/somemagic/.test(43); // true
/somemagic/.test(422); // true

我的Google-fu出现的解决方案对我的用例没有用,因为我关心的是匹配正在测试的整个值,而不仅仅是它的一部分。

我无休止地寻找这个......任何帮助都会非常感激!

谢谢!

1 个答案:

答案 0 :(得分:3)

你需要一个锚定的否定前瞻:

document.write(/^(?!42$)\d+$/.test(42) + "<br/>");
document.write(/^(?!42$)\d+$/.test(43) + "<br/>");
document.write(/^(?!42$)\d+$/.test(422));

(?!42$)前瞻检查字符串的最开头,如果字符串是42(因为$断言字符串的结尾)。因此,42\d+模式不匹配。

这是一种很好的技术,可以为更通用的模式添加例外,例如速记或字符类,甚至是带有可选组的模式。