如果双大括号 {{key:value}} 之间存在冒号字符,则使用正则表达式查找匹配项

问题描述 投票:0回答:1

我正在尝试重构下面的方法以使用正则表达式而不是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')

javascript angular regex typescript
1个回答
0
投票

您可以使用先行模式来断言

{{
之后是冒号(两个括号都需要转义),中间仅包含非
}

const valueStr = "{{key: value}}"
console.log(valueStr.match(/\{\{(?=[^}]*:)[^}]*}}/) != null)

© www.soinside.com 2019 - 2024. All rights reserved.