向JavaScript正则表达式传递变量执行匹配始终返回null如何解决?
核心问题排查
- 转义错误导致正则规则失效
使用new RegExp()传入字符串构造正则时,字符串本身会先做一次转义解析,你写的\b在字符串中会被解析为退格控制符,而非正则语法中的单词边界,需要写成\\b做双重转义才能让正则拿到正确的规则。 - 全局修饰符导致无法拿到捕获组
加了g全局修饰符后,String.match()只会返回所有完整匹配的字符串数组,不会返回括号内的捕获组内容,你要拿到"all":的捕获结果,需要去掉g修饰符后取匹配结果的对应索引。
修正后可运行代码
'use strict'; function matchExp(val) { let text = 'Is this " all": there is?'; // 对\b做双重转义,去掉多余的g修饰符 var match_pat = '[^"]*\\s(all\\b[^"]*"\\s*:)'; var regMatch = new RegExp(match_pat); const matchRes = text.match(regMatch); return matchRes ? matchRes[1] : null; } console.log(matchExp()) // 输出你预期的 "all": module.exports = { matchExp }
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

