如何在JavaScript中使用正则表达式从字符串中提取匹配子串
JavaScript正则提取匹配子串解决方案
问题原因
- 错误添加了
^、$锚点:两个符号分别限制匹配字符串的开头和结尾,你的目标字符串前缀是[2021-05-29] Version,不可能符合开头、结尾都是版本号的规则,直接匹配失败 - 字符串正则转义错误:使用
new RegExp()传入字符串参数时,反斜杠\本身需要二次转义,你写的\d会被解析为普通字符d,无法实现数字匹配的效果
正确实现
推荐写法:正则字面量(无需额外转义)
const versionRegex = /(\d+)\.(\d+)\.(\d+)/ const line = "[2021-05-29] Version 2.24.9" const matchResult = line.match(versionRegex) if (matchResult) { // 等价于Python中found.group(),返回完整匹配的子串 console.log(matchResult[0]) // 输出结果:2.24.9 // 三个分组的内容分别对应索引1、2、3的元素 console.log(matchResult[1]) // 2 console.log(matchResult[2]) // 24 console.log(matchResult[3]) // 9 }
RegExp构造函数写法
如果需要动态生成正则,使用构造函数的写法要注意转义反斜杠:
const versionRegex = new RegExp('(\\d+)\\.(\\d+)\\.(\\d+)') const line = "[2021-05-29] Version 2.24.9" const matchResult = line.match(versionRegex) // 后续判断和取值逻辑和上面一致
扩展说明
如果需要提取字符串中所有符合规则的版本号,给正则添加g全局匹配标识即可:
// 字面量写法加g const versionRegex = /(\d+)\.(\d+)\.(\d+)/g // 构造函数写法第二个参数传g const versionRegex = new RegExp('(\\d+)\\.(\\d+)\\.(\\d+)', 'g')
内容的提问来源于stack exchange,提问作者lakshmiravali rimmalapudi
相关产品推荐
相关产品推荐

