var reg = /^(?!managed).+\.coffee$/
var match = '20150212214712-test-managed.coffee'.match(reg)
console.log(match) // prints '20150212214712-test-managed.coffee'
我只想在字符串中不存在单词“managed”时才匹配正则表达式 - 我该怎么做?
最佳答案
负前瞻很奇怪。您必须匹配的不仅仅是要查找的单词。这很奇怪,我知道。
var reg = /^(?!.*managed).+\.coffee$/
http://jsfiddle.net/sqee98xr/3/
编辑: 看来我真的用“奇怪的”描述符和外行描述来激怒某些人。这很奇怪,因为从表面上看,术语“负面前瞻”意味着“向前看并确保这些括号中的内容不在那里,然后返回并继续匹配”。作为正则表达式的爱好者,我仍然宣称这个命名很奇怪,尤其是对于第一次使用断言的用户。对我来说,将其视为“非”运算符比实际向前爬行并“向前看”的运算符更容易。为了使行为类似于实际的“向前看”,您必须匹配搜索词之前的所有内容,因此 .*
.
一个更简单的解决方案是删除字符串开头 (^) 断言。同样,对我来说,将 ?!
理解为“不”更容易。
var reg = /(?!managed).+\.coffee$/
关于javascript - 为什么这个正则表达式返回匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487838/