我希望使用(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出现的解决方案对我的用例没有用,因为我关心的是匹配正在测试的整个值,而不仅仅是它的一部分。
我无休止地寻找这个......任何帮助都会非常感激!
谢谢!
答案 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+
模式不匹配。
这是一种很好的技术,可以为更通用的模式添加例外,例如速记或字符类,甚至是带有可选组的模式。