首页 > 解决方案 > 正则表达式用多个字符替换匹配模式的字符串

问题描述

我有一个这样的字符串

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

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

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

我在尝试匹配此模式时遇到了麻烦。

我可以看到,如果我这样做

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

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

但我不知道如何搜索整个模式,如下所示,我发现任何以 开头@[和结尾的东西),我不想自己开始,@因为字符串中可能有时间我没有不想删除@后面没有a的地方[

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

标签: javascriptregexreplacehandlebars.js

解决方案


您可以使用

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

请参阅正则表达式演示详情

  • @\[- 一个@[字符串
  • [^\][]*[- 除了and之外的零个或多个字符]
  • ]\(- 一个](字符串
  • ([^()]*)- 第 1 组 ( ):除and$1之外的任何零个或多个字符()
  • \)- 一个)字符。

请参阅 JavaScript 演示:

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


推荐阅读