regex 如何使用正则表达式匹配精确字符串并将所有字符串替换为其他字符串?

kq4fsx7k  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(122)

最近我遇到了一个问题,我需要将双花括号更改为三花括号,
下面的例子可以进一步澄清这一需要,

let mystring = '{{Hello Tom}} , {{How are you doing today}}'

我需要更改上面的字符串,并将“{{”和“}}”分别替换为“{{”和“}}}”。
目前我使用的正则表达式如下,

let output_string = mystring.replace(/{{/g, "{{{").replace(/}}/g, "}}}")

在第一次执行时,它工作正常,我得到了所需的输出为“{{{Hello Tom}}},{{{How are you doing today}}}”,当下一次执行发生时,它更改为4个大括号,如下所示,
第二次执行后输出,

'{{{{Hello Tom}}}} , {{{{How are you doing today}}}}'

每当事件重复时,它会不断增加大括号。
我只想把2个花括号替换成3,不再做其他的了
我怎样才能做到这一点???

efzxgjgh

efzxgjgh1#

你可以这样做:

const output = input.replace(/\{+(.*?)\}+/g, (match, p1) => {
  return `{{{${p1}}}}`;
});

正则表达式模式/\{+(.*?)\}+/g匹配任意数量的大括号(包括没有),并捕获组1中大括号内的文本。

    • 演示**
const input = '{{Hello Tom}} , {{How are you doing today}}';

const input2 = '{{{Hello Tom}}} , {{{How are you doing today}}}';

const input3 = '{{{{Hello Tom}}}} , {{{{How are you doing today}}}}';

const output = input.replace(/\{+(.*?)\}+/g, (match, p1) => {
  return `{{{${p1}}}}`;
});

const output2 = input2.replace(/\{+(.*?)\}+/g, (match, p1) => {
  return `{{{${p1}}}}`;
});

const output3 = input3.replace(/\{+(.*?)\}+/g, (match, p1) => {
  return `{{{${p1}}}}`;
});

console.log(output)
console.log(output2)
console.log(output3)

相关问题