好吧,我现在感觉很浓。基本上,我想定义一个JavaScript正则表达式,该表达式将匹配除特定字符串外的所有内容。所以说我有琴弦

"dog"

或者
"cat"

我想要一个独立的正则表达式,这样它将与字符串匹配
"dogsled"

或字符串
"cattle"

只是不能单独使用“狗”或“猫”。我已经尝试过了,基本上是说,忽略了任何以“cat”或“dog”开头的内容,而这并不是我真正需要的...
var pattern= /^(?!dog|cat).+/

pattern.test("cat") // false, as expected
pattern.test("dog") // false, as expected
pattern.test("bananananana") // true
pattern.test("dogsled") // false, but the regexp I want would return true

这必须很简单....谢谢!

编辑
只是为了澄清一下,我不想对返回值做任何求反以获得我想要的结果-正则表达式应该为“dog”返回false,为“dogsled”返回true,为“catsled”返回false,对于“cattle”返回true

最佳答案

我会选择简单地否定一个匹配项,如Linus Kleen's answer中所述。但是,如果您绝对必须在正则表达式中(或出于学习经验等目的)完成所有操作,那么我认为以下方法应该有效:

^((dog|cat(?!$)).+|(?!dog|cat).+)$

这交替使用两个否定的前行。第一个表示“匹配catdog,如果不跟在字符串字符($)的末尾,再跟其他任何字符”。这匹配了dogsledcats以及类似性质的东西。

替换的后半部分说:“确保字符串(^)的开头不跟在dogcat(因此不要以任何一个开头),然后匹配任何内容”。这可以让您获得任何不以catdog开头的单词(例如banana)。

Here's an example on regexpal

关于javascript - 定义匹配除特定字符串以外的任何内容的JavaScript正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8853187/

10-11 09:20
查看更多