Javascript 有没有这样一种说法;否定交替;,或;求反字符串类";,a“la”;否定字符类“;,在PCRE?
好的,当模式Javascript 有没有这样一种说法;否定交替;,或;求反字符串类";,a“la”;否定字符类“;,在PCRE?,javascript,regex,pcre,Javascript,Regex,Pcre,好的,当模式[abc]匹配一个字符,即a、b或c,模式[^abc]匹配任何不是a、b或c的给定字符 现在,如果我在上面的语句中用字符串替换字符,如果我也将第一个模式更改为类似(abc | def | ghi),它仍然适用它将匹配三个字符的连续字符串,这些字符等于abc、def或ghi。如何匹配任何不等于abc、def或ghi的三个字符的字符串?您可以使用否定的前瞻来执行以下操作: xyz(?!abc|def|ghi) 这意味着“xyz后跟除abc、def或ghi之外的任何内容”。它实际上并不消
[abc]
匹配一个字符,即a
、b
或c
,模式[^abc]
匹配任何不是a
、b
或c
的给定字符
现在,如果我在上面的语句中用字符串替换字符,如果我也将第一个模式更改为类似
(abc | def | ghi)
,它仍然适用它将匹配三个字符的连续字符串,这些字符等于abc
、def
或ghi
。如何匹配任何不等于abc
、def
或ghi
的三个字符的字符串?您可以使用否定的前瞻来执行以下操作:
xyz(?!abc|def|ghi)
这意味着“xyz后跟除abc、def或ghi之外的任何内容”。它实际上并不消耗源代码,因此在这之后,您会将应该继续匹配的内容放在“xyz”之后。就是
/xyz(?!abc|def|ghi)(\w*)/
匹配“xyzhello”,第一个捕获组将包含“hello”。这是正则表达式的常见问题,简短的回答是“否”,正则表达式的操作方式不提供表示“任何3个字母的字符串,除了…”的方式 然而,一些正则表达式引擎允许所谓的“消极前瞻断言”。这是一个有点棘手的让你的头周围-似乎涵盖它相当好,如果一点技术
关于lookahead,重要的是它是“零宽度”——它不会“用完”任何字符串。因此,在Javascript中,您可以匹配如下字符串:
'abc123ghi'.match(/abc(?!def)…ghi/)
-the(?!def)
表示在'abc'
之后不能有字母'def'
,但是,…
需要在那里表示应该有其他3个字符。您已经将其标记为“javascript”和“pcre”。请注意,尽管它们在很多方面都很相似,但它们在正则表达式实现中并没有相同的特性。是的,我知道负面环顾,但还没有聪明到想出解决方法。不管怎样,很酷——谢谢!或者说abc后面不是def,而是yes,后面是三个连续的字符,这些字符彼此都相同吗?@adlwalrus yes,这将完全相同-{3}
完全等同于..