let regexp = /Rim.*?vert\s(\d*)cm/g
let content = "BEONE SPS SPIRIT, 2012y.b.,26 Rim - BEONE aluminium, vert 51cm «L»,ЕТТ600mm, 835 37 38"
执行content.match(regexp)
后,我得到了:
["Rim - BEONE aluminium, vert 51cm"]
所以,我预计它会将匹配的组(51)作为第二个数组元素返回。
但是当我使用regexp.exec(content)
时,一切似乎都没问题:
["Rim - BEONE aluminium, vert 51cm", "51"]
为什么会有这样的差异?
我的code \ regexp有什么问题,所以它会返回不同的结果?
答案 0 :(得分:1)
如String.prototype.match() MDN documentation中所述:
如果你想获得捕获组并且设置了全局标志,那么你 需要使用RegExp.exec()代替。
因此,要使用String.prototype.match()
获得相同的结果,请从正则表达式中删除g
标志:
let regexp = /Rim.*?vert\s(\d*)cm/ //<-- Removed the "g" flag.
let content = "BEONE SPS SPIRIT, 2012y.b.,26 Rim - BEONE aluminium, vert 51cm «L»,ЕТТ600mm, 835 37 38";
let resultMatch = content.match(regexp);
console.log('result with match:', resultMatch);
let resultExec = regexp.exec(content);
console.log('result with exec:', resultExec);
&#13;
答案 1 :(得分:0)
值得一提的是,如果string.match()和regex.exec()的结果相同,则regex.exec()将花费更多的时间(在x2到x30之间) string.match():
在这种情况下,仅在需要全局正则表达式(执行多次)时才使用regex.exec()。