如何使用 RegEx 否定匹配特定值

How to negatively match a specific value with RegEx

我想使用 (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 出现的解决方案不适用于我的用例,因为我关心匹配被测试的整个值,而不仅仅是它的一部分。

我一直在寻找这个...任何帮助将不胜感激!

谢谢!

你需要一个锚定的负面前瞻:

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

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

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