Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有这样一种说法;否定交替;,或;求反字符串类";,a“la”;否定字符类“;,在PCRE?_Javascript_Regex_Pcre - Fatal编程技术网

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}
完全等同于
..