Javascript /(\S)\1(\1)和#x2B/g匹配三个相等的非空白字符的所有匹配项
它的给定值:/(\S)\1(+\1)+/g匹配三个相等的非空白字符的所有匹配项 我不明白为什么在(\S)和第二(\1)附近有()而在第一(\1)附近没有。有人能帮忙解释一下上面的正则表达式是如何工作的吗 src: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表示“将此正则表达式应用于整个输入字符串或全
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+之后的+
可能不是?