这个捕获组在Javascript的replace函数文档中的正则表达式中做什么?
代码如下: 我认为以下示例将newString设置为: “abc-12345-#$*%”: 我不确定3个捕获组在正则表达式中做什么?第一个比喻:这个捕获组在Javascript的replace函数文档中的正则表达式中做什么?,javascript,regex,Javascript,Regex,代码如下: 我认为以下示例将newString设置为: “abc-12345-#$*%”: 我不确定3个捕获组在正则表达式中做什么?第一个比喻: ([^/d]*) 捕获所有不是数字的东西 第二组是否捕获了所有数字 第三组是否捕获所有非字母数字字符(字母或数字) 传递给replacer函数的是什么?如果replace函数中的replace函数没有收到任何参数,那么p1p2和p3是什么 ([^\d]*)匹配0个或多个非匹配项。它可以写成([\D]*) (\d*)匹配0个或更多数字 ([^\w]*)
([^/d]*)
捕获所有不是数字的东西
第二组是否捕获了所有数字
第三组是否捕获所有非字母数字字符(字母或数字)
传递给replacer函数的是什么?如果replace函数中的replace函数没有收到任何参数,那么p1p2和p3是什么
([^\d]*)
匹配0个或多个非匹配项。它可以写成([\D]*)
(\d*)
匹配0个或更多数字([^\w]*)
匹配0个或多个非字符。它可以写成([\W]*)
([^\d]*)(\d*)([^\w]*)
用于匹配输入字符串的三段
([^\d]*)
-使用否定匹配任何非数字零次或多次,在本例中为abc
(\d*)
-匹配上一个捕获组后面的零个或多个数字[0-9]
,在本例中为12345
([^\w]*)
-匹配前一个捕获组之后的集合中未包含的任何字符,因此非常特殊。在这种情况下,#$*%
replacer
函数实际上并没有替换那些捕获组,而是保留它们并在它们之间放置破折号-
因为有三个捕获组(如上所述),所以三个参数p1-p3
表示这些捕获组
函数参数是基于模式中捕获组的数量动态填充的(JavaScript的一部分)。因此,如果您有4个捕获组,那么将有四个捕获组参数:
function replacer(match, p1, p2, p3, p4, offset, string) { ... }
参数名称显然并不重要,只是在函数中调用它们的任何内容
replacer
函数接受三个捕获组参数并返回以下内容:[p1、p2、p3]。join('-')
。这只是将-
(两边都有空格)放在捕获组之间,并返回abc-12345-#$*%
进一步阅读join
函数:
function replacer(match, p1, p2, p3, p4, offset, string) { ... }