如何使用 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 或字符 类,甚至是带有可选组的模式。
我想使用 (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 或字符 类,甚至是带有可选组的模式。