正则表达式用多个字符替换字符串匹配模式

Regex replace strings matching pattern with multiple charercters

我有这样的字符串

const str = "Today is going to be @[City Temp](city-temp) in @[City Name](city-name)"

我希望输出采用 handlebars 语法,例如

const str = "Today is going to be {{city-temp}} in {{city-name}}"

我在尝试匹配此模式时遇到问题。

我可以看到如果我这样做

str.replace(/[()]/g,"")

我得到了没有括号的字符串。

但我不知道如何搜索整个模式,如下所示,我找到了以 @[ 开头并以 ) 结尾的任何内容,我不想只是从 @ 本身开始,因为字符串中有时我不想删除 @ 后面没有 [

/[\@\[A-Za-z0-9\](A-Za-z0-9-)

你可以使用

str = str.replace(/@\[[^\][]*]\(([^()]*)\)/g, "{{}}")

regex demo详情:

  • @\[ - @[ 字符串
  • [^\][]* - []
  • 以外的零个或多个字符
  • ]\( - ]( 字符串
  • ([^()]*) - 第 1 组 (</code>):除 <code>()
  • 之外的任何零个或多个字符
  • \) - 一个 ) 字符。

查看 JavaScript 演示:

const str = "Today is going to be @[City Temp](city-temp) in @[City Name](city-name)"
console.log(str.replace(/@\[[^\][]*]\(([^()]*)\)/g, "{{}}"))