JavaScript正则exec方法返回分组捕获结果的问题咨询
原因说明
JavaScript 正则语法中,直接通过圆括号 () 定义的分组属于捕获型分组。exec() 方法的返回值规则是:数组索引 0 固定为整个正则匹配到的完整字符串,从索引 1 开始会按书写顺序,依次存放每个捕获分组单独匹配到的内容。你看到结果里单独返回的 bg,就是 (bg|cs) 这个捕获组匹配到的单位值,属于正则的默认运行逻辑,不是写法错误。
修复方案
如果你不需要单独提取匹配到的单位字段,把捕获分组改成非捕获分组就可以。非捕获分组的写法是 (?:匹配规则),它仅用来圈定匹配范围、实现分支逻辑匹配,不会把分组内匹配到的内容单独存到返回结果中。
修改后的正则如下:
const reg = /\d+\/(?:bg|cs)/gi
使用这个正则执行 reg.exec(myString),返回数组里就不会再单独出现 bg 项,数组首位就是你需要的完整匹配结果 50/bg。
多匹配项提取参考
你提到单个字符串可能存在多个匹配项,因为正则加了 g 全局匹配标识,可以通过循环调用 exec() 的方式拿到所有结果,直到返回值为 null 时终止遍历即可,示例代码:
const myString = '3-Ply Tissue, 23" x 24", 50/bg, 200/cs' const reg = /\d+\/(?:bg|cs)/gi const matches = [] let currentMatch = null while ((currentMatch = reg.exec(myString)) !== null) { matches.push(currentMatch[0]) } // matches 最终值为 ['50/bg', '200/cs']
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

