REGEX:匹配和执行返回不同的结果

Src*_*Src 4 javascript regex

let regexp = /Rim.*?vert\\s(\\d*)cm/g\nlet content = "BEONE SPS SPIRIT, 2012y.b.,26 Rim - BEONE aluminium, vert 51cm \xc2\xabL\xc2\xbb,\xd0\x95\xd0\xa2\xd0\xa2600mm, 835 37 38"\n
Run Code Online (Sandbox Code Playgroud)\n\n

执行后content.match(regexp),我得到:

\n\n
["Rim - BEONE aluminium, vert 51cm"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,我预计它将返回匹配组 (51) 作为第二个数组元素。

\n\n

但是当我使用时regexp.exec(content),一切似乎都很好:

\n\n
["Rim - BEONE aluminium, vert 51cm", "51"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么会有这样的差异呢?

\n\n

我的代码有什么问题\\regexp所以它返回不同的结果?

\n

And*_*rea 5

如String.prototype.match() MDN 文档中所述:

\n\n
\n

如果您想获取捕获组并设置了全局标志,则需要使用RegExp.exec()

\n
\n\n

因此,要获得与 相同的结果String.prototype.match(),请g从正则表达式中删除该标志:

\n\n

\r\n
\r\n
let regexp = /Rim.*?vert\\s(\\d*)cm/ //<-- Removed the "g" flag.\r\nlet content = "BEONE SPS SPIRIT, 2012y.b.,26 Rim - BEONE aluminium, vert 51cm \xc2\xabL\xc2\xbb,\xd0\x95\xd0\xa2\xd0\xa2600mm, 835 37 38";\r\n\r\nlet resultMatch = content.match(regexp);\r\nconsole.log(\'result with match:\', resultMatch);\r\n\r\nlet resultExec = regexp.exec(content);\r\nconsole.log(\'result with exec:\', resultExec);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n