javascript match()regex函数应该返回什么?
举个例子:javascript match()regex函数应该返回什么?,javascript,regex,match,Javascript,Regex,Match,举个例子: "12345".match(/(?=(\d{4}))/g); 将上面这一行粘贴到我的(Chrome)控制台中会返回[“”,“”],但我正在尝试提取[“1234”,“2345”]数组。似乎表明我确实应该期待一系列匹配 这个字符串上的特定正则表达式肯定会返回那些匹配项,正如昨天证明的那样 如果我对该函数做出了错误的假设和/或误用了它,请任何人澄清预期的行为应该是什么,以及我在这里可以采取的任何替代方法。编辑:如上所述,正则表达式似乎不是适合该工作的工具 为了弥补自己的不足,这里有一个有
"12345".match(/(?=(\d{4}))/g);
将上面这一行粘贴到我的(Chrome)控制台中会返回[“”,“”]
,但我正在尝试提取[“1234”,“2345”]
数组。似乎表明我确实应该期待一系列匹配
这个字符串上的特定正则表达式肯定会返回那些匹配项,正如昨天证明的那样
如果我对该函数做出了错误的假设和/或误用了它,请任何人澄清预期的行为应该是什么,以及我在这里可以采取的任何替代方法。编辑:如上所述,正则表达式似乎不是适合该工作的工具 为了弥补自己的不足,这里有一个有趣的解决方案,涉及数组和
slice
。文字4
可以替代任何其他数字,以达到类似效果
console.log(
“12345”.split(“”).map((u,i,a)=>a.slice(i,i+4).join(“”)).slice(0,1-4)
)
你引用了这个问题。为什么不从那里接受答案()的代码
“12345”出了什么问题。匹配(/(?=(\d{4}))/g)
是指在[“”,“”]
中,第一个“”
对应于$0(整个匹配)=“”,$1(第1组)=“1234”
,第二个“”
(由于g,数组类似于[$0(匹配1),$0(匹配2)]
)
如果省略g
(“12345.match”(/(?=(\d{4}))/);
),您将得到[“”,“1234”]
([$0(匹配),$1(匹配)]
)。(1)您不能在多个匹配中匹配源字符串中的同一字符,这显然是您想要的,因为“234”在两个所需匹配中都是。(2) 前瞻并不是捕获它所期待的字符,所以这就是为什么会得到空字符串的原因。你不能只是从答案中窃取正则表达式,而是忽略使用正则表达式的代码。Chrome为您的代码生成预期的输出。如果你使用你链接的答案中提供的代码,你会得到你想要的结果。@Rawing-正如我在那里的评论中所说,代码给我带来了无限循环。今天晚些时候我将再次访问它,但是match()
更吸引我,因为它看起来更短/更可读。请指定您对字符串的期望值。这只生成一个匹配项,而不是两个匹配项。