我以为我理解正则表达式运算符是如何工作的,但现在我真的很困惑.在简化示例中,我有两个字符串:
mail.wow.no-1.com
mail.ololo.wow.com
Run Code Online (Sandbox Code Playgroud)
我想匹配第一个,而不是第二个.我正在写这样的正则表达式(简化版):
^mail\.(.*)(?!\.wow\.com)$
Run Code Online (Sandbox Code Playgroud)
当我在这两个例子中运行JS方法测试时,它只返回true(在崇高的2正则表达式搜索中突出显示两个字符串,这意味着两个字符串匹配)
我知道我可以制作反向正则表达式,它将匹配第二个并根据这个制作逻辑,但我只想了解(?!)
正则表达式如何工作以及我做错了什么.
谢谢.
你需要.*
在前瞻内部(并.*
在前瞻的外部前移动):
^mail(?!.*\.wow\.com)\.(.*)$
Run Code Online (Sandbox Code Playgroud)
否则,您的前瞻只会检查字符串的末尾.显然,在字符串的末尾,永远不会有.wow.com
.您现在也可以将前瞻移动到模式的开头:
^(?!.*\.wow\.com)mail\.(.*)$
Run Code Online (Sandbox Code Playgroud)
最后一个变体的效率稍差,但如果影响整个字符串的前瞻一切都在模式的开头,我发现模式更容易阅读.
归档时间: |
|
查看次数: |
147 次 |
最近记录: |