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"\nRun Code Online (Sandbox Code Playgroud)\n\n执行后content.match(regexp),我得到:
["Rim - BEONE aluminium, vert 51cm"]\nRun Code Online (Sandbox Code Playgroud)\n\n因此,我预计它将返回匹配组 (51) 作为第二个数组元素。
\n\n但是当我使用时regexp.exec(content),一切似乎都很好:
["Rim - BEONE aluminium, vert 51cm", "51"]\nRun Code Online (Sandbox Code Playgroud)\n\n为什么会有这样的差异呢?
\n\n我的代码有什么问题\\regexp所以它返回不同的结果?
\n如String.prototype.match() MDN 文档中所述:
\n\n\n\n\n如果您想获取捕获组并设置了全局标志,则需要使用RegExp.exec()。
\n
因此,要获得与 相同的结果String.prototype.match(),请g从正则表达式中删除该标志:
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