我正在尝试重构下面的方法以使用正则表达式而不是indexOf:
hasMatch(value: any): boolean {
if (isDefined(value)) {
const valueStr = JSON.stringify(value);
return valueStr.indexOf('{{') > -1 && valueStr.indexOf(':') > -1;
} else {
return false;
}
}
目前它只是检查字符串中是否有双括号“{{”和冒号。这意味着我匹配替换字符串之外的冒号,这是我不想要的。
仅当两个双括号之间存在冒号且键/值对如下时,我才需要返回匹配项:
{{key:value}}
这是我在这里使用一些示例拼凑而成的内容(我显然是一个完整的正则表达式新手):
const matches = valueStr.match(/\{{({^\}{}*)}}/g).map(x => `[${x.replace(/[^:]/g, '')}]`)
但我目前陷入了这个错误:
main.js:66071 ERROR TypeError: Cannot read properties of null (reading 'map')
您可以使用先行模式来断言
{{
之后是冒号(两个括号都需要转义),中间仅包含非 }
:
const valueStr = "{{key: value}}"
console.log(valueStr.match(/\{\{(?=[^}]*:)[^}]*}}/) != null)