如何使用正则表达式从字符串中提取id对应的指定文本内容
正确实现方案
先给出可直接运行的完整代码:
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"'; // 正则匹配后提取捕获组内容 let res = Array.from(str.matchAll(/id\s*=\s*"([^"]*)"/g), match => match[1]); console.log(res); // 输出:['Test This is','second','third-123']
如果需要兼容不支持matchAll的旧运行环境,也可以用exec循环实现:
let str = 'id = "Test This is" id ="second" abc 123 id ="third-123"'; let reg = /id\s*=\s*"([^"]*)"/g; let res = [], match; while((match = reg.exec(str)) !== null) { res.push(match[1]); } console.log(res);
正则规则说明
id\s*=\s*":匹配id="固定前缀,\s*兼容等号前后存在任意数量空格的场景([^"]*):核心捕获逻辑,匹配所有非双引号的字符,保证只会匹配到当前id对应的右双引号为止,不会出现跨段匹配的问题g:全局匹配标识,遍历整个字符串提取所有符合规则的id内容
原正则错误原因
- 否定字符组
[^id ="\[]逻辑错误:否定字符组仅对单个字符生效,该写法仅能排除单个i、d、空格、等号、双引号、中括号字符,无法实现排除id="完整前缀的效果 .*为贪婪匹配模式,默认会匹配尽可能长的字符串,因此会直接从第一个匹配位置一直匹配到字符串末尾,导致只返回一个包含后续全部内容的结果
内容的提问来源于stack exchange,提问作者s_guha96
相关产品推荐
相关产品推荐

