如何用正则检测{{key:value}}双大括号内的冒号并修复TypeError报错?
解决方案:检测双大括号内是否包含冒号
报错原因
你的代码报错是因为当valueStr中没有匹配内容时,match()方法会返回null,直接链式调用map()就会触发Cannot read properties of null的类型错误。
正则修正与方法重构
你需要的是仅判断双大括号内部是否存在冒号,不需要提取或转换匹配结果,用正则的test()方法更高效(直接返回布尔值)。以下是重构后的完整方法:
hasMatch(value: any): boolean { if (isDefined(value)) { const valueStr = JSON.stringify(value); // 正则说明:匹配{{ 中间包含冒号、且无嵌套大括号的内容 }} const targetRegex = /{{[^{}]*:[^{}]*}}/; return targetRegex.test(valueStr); } else { return false; } }
正则细节解释
{{:精确匹配两个左大括号[^{}]*:匹配任意数量(0次及以上)的非大括号字符,避免匹配到嵌套的{{}}::精确匹配冒号,确保冒号在双大括号内部}}:精确匹配两个右大括号
如果你需要提取匹配结果
如果后续需要获取所有符合条件的{{key:value}}片段,可以先判断match()的结果是否为null再处理:
const matches = valueStr.match(/{{[^{}]*:[^{}]*}}/g); if (matches) { // 这里可以处理匹配到的结果,比如你的map操作 const processed = matches.map(x => `[${x.replace(/[^:]/g, '')}]`); }
内容的提问来源于stack exchange,提问作者js-newb
相关产品推荐
相关产品推荐

