Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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 /(\S)\1(\1)和#x2B/g匹配三个相等的非空白字符的所有匹配项_Javascript_Regex - Fatal编程技术网

Javascript /(\S)\1(\1)和#x2B/g匹配三个相等的非空白字符的所有匹配项

Javascript /(\S)\1(\1)和#x2B/g匹配三个相等的非空白字符的所有匹配项,javascript,regex,Javascript,Regex,它的给定值:/(\S)\1(+\1)+/g匹配三个相等的非空白字符的所有匹配项 我不明白为什么在(\S)和第二(\1)附近有()而在第一(\1)附近没有。有人能帮忙解释一下上面的正则表达式是如何工作的吗 src: Thnx提前。该\S需要括号来捕获其值,因此您可以使用\1返回到捕获的值\1表示“匹配与捕获组#1匹配的相同文本” 我相信这个正则表达式有问题。您说过要匹配“三个相等的非空白字符”。但是+将使此匹配具有3个或更多相等的连续非空白字符 末尾的g表示“将此正则表达式应用于整个输入字符串或全

它的给定值:/(\S)\1(+\1)+/g匹配三个相等的非空白字符的所有匹配项

我不明白为什么在(\S)和第二(\1)附近有()而在第一(\1)附近没有。有人能帮忙解释一下上面的正则表达式是如何工作的吗

src:


Thnx提前。

\S
需要括号来捕获其值,因此您可以使用
\1
返回到捕获的值<代码>\1表示“匹配与捕获组#1匹配的相同文本”

我相信这个正则表达式有问题。您说过要匹配“三个相等的非空白字符”。但是
+
将使此匹配具有3个或更多相等的连续非空白字符


末尾的
g
表示“将此正则表达式应用于整个输入字符串或全局”。

\S
需要括号来捕获其值,因此您可以使用
\1
引用捕获的值<代码>\1表示“匹配与捕获组#1匹配的相同文本”

我相信这个正则表达式有问题。您说过要匹配“三个相等的非空白字符”。但是
+
将使此匹配具有3个或更多相等的连续非空白字符


末尾的
g
表示“将此正则表达式应用于整个输入字符串或全局”。

第二组括号不是必需的。它第二次不必要地捕获重复的字符,同时匹配与此正则表达式相同的字符串:

/(\S)\1\1+/g
此外,正如@AlexD所指出的,描述应该说它至少匹配三个字符。如果将该正则表达式替换为字符串
fooxxxxxxbar
中的
BONK

'fooxxxxxxbar'.replace(/(\S)\1\1+/g, 'BONK')
…从它们的描述中,您可能会期望结果是
foobonkbar
,因为有两组三个'x'。但事实上,结果将是
fooBONKbar
;第一个
\1
与第二个“x”匹配,
\1+
与第三个“x”及其后面的任何“x”匹配。如果他们只想匹配三个字符,他们应该关闭
+

我注意到其他几个类似的草率描述,加上至少一个明显的错误:
\B
相当于
(?!\B)
(一个不是单词边界的位置),而不是
[^\B]
(一个不是退格的字符)。因此,他们对单词边界的描述——“单词和空格之间的位置”——也是错误的。单词边界不是由任何特定的字符定义的,比如空格——事实上,它也可以是没有任何字符创建的。字符串:

Word
…以单词边界开头,因为“W”是单词字符,并且作为第一个字符,它前面没有其他单词字符。类似地,“d”后面没有另一个单词字符,因此字符串的结尾也是单词边界

此外,正则表达式不知道单词,只知道单词字符。单词字符的定义可能因正则表达式风格和Unicode或语言环境设置而异,但它始终包括
[a-Za-z0-9.]
(ASCII字母和数字加下划线)。单词边界只是这些字符中的一个字符和任何其他字符(或者没有其他字符,正如我前面解释的)之间的位置


如果您想了解正则表达式,我建议您忘记该站点,从这里开始:。

第二组括号不是必需的。它第二次不必要地捕获重复的字符,同时匹配与此正则表达式相同的字符串:

/(\S)\1\1+/g
此外,正如@AlexD所指出的,描述应该说它至少匹配三个字符。如果将该正则表达式替换为字符串
fooxxxxxxbar
中的
BONK

'fooxxxxxxbar'.replace(/(\S)\1\1+/g, 'BONK')
…从它们的描述中,您可能会期望结果是
foobonkbar
,因为有两组三个'x'。但事实上,结果将是
fooBONKbar
;第一个
\1
与第二个“x”匹配,
\1+
与第三个“x”及其后面的任何“x”匹配。如果他们只想匹配三个字符,他们应该关闭
+

我注意到其他几个类似的草率描述,加上至少一个明显的错误:
\B
相当于
(?!\B)
(一个不是单词边界的位置),而不是
[^\B]
(一个不是退格的字符)。因此,他们对单词边界的描述——“单词和空格之间的位置”——也是错误的。单词边界不是由任何特定的字符定义的,比如空格——事实上,它也可以是没有任何字符创建的。字符串:

Word
…以单词边界开头,因为“W”是单词字符,并且作为第一个字符,它前面没有其他单词字符。类似地,“d”后面没有另一个单词字符,因此字符串的结尾也是单词边界

此外,正则表达式不知道单词,只知道单词字符。单词字符的定义可能因正则表达式风格和Unicode或语言环境设置而异,但它始终包括
[a-Za-z0-9.]
(ASCII字母和数字加下划线)。单词边界只是这些字符中的一个字符和任何其他字符(或者没有其他字符,正如我前面解释的)之间的位置


如果你想了解正则表达式,我建议你忘记那个站点,从这里开始:。

我对javascript正则表达式不够熟悉,但是
/(\S)\1(+\1)+/g
中的(\1)+表示1个或更多,但是可能\1+之后的
+
不是吗?我对javascript正则表达式不够熟悉,但是
/(\S)\1(\1)中的(\1)++/g
表示1个或多个,但\1+之后的
+
可能不是?