首页 > 解决方案 > 替换字符串的一个字符

问题描述

我有一个看起来像这样的字符串:[TITLE|prefix=a].

从该字符串中,文本|prefix=a是动态的。所以它可以是任何东西,也可以是空的。我想用 . 替换(在这种情况下[TITLE|prefix=a][TITLE|prefix=a|suffix=z]

所以这个想法是]从一个以 . 开头的字符串替换[TITLE with |suffix=z]

例如,如果字符串是[TITLE|prefix=a],则应将其替换为[TITLE|prefix=a|suffix=z]。如果是[TITLE],则应将其替换为[TITLE|suffix=z],依此类推。

我怎样才能用正则表达式做到这一点?

我已经尝试过这种方式,但它给出了一个错误:

let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';

const x = 'TITLE';

const regex = new RegExp(`([${x})*]`, 'gi');
str = str.replace(regex, "$1|suffix=z]");

console.log(str);

我也尝试过用 [ 和 ] 转义字符,new RegExp(`(\[${x})*\]`, 'gi');但这并没有帮助。

标签: javascriptregex

解决方案


您需要记住\\在常规字符串文字中使用来定义单个文字反斜杠。

然后,你需要一个像

/(\[TITLE(?:\|[^\][]*)?)]/gi

请参阅正则表达式演示。细节:

  • (\[TITLE\|[^\][]*)- 捕获组 1:
    • \[TITLE-[TITLE文字
    • (?:\|[^\][]*)?- 一个可选出现的|字符后跟 0 个或多个字符,除了]and[
  • ]- 一个]字符。

在您的 JavaScript 代码中,使用以下内容定义动态模式:

const regex = new RegExp(`(\\[${x}\\|[^\\][]*)]`, 'gi');

参见 JS 演示:

let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur] [TITLE]';
const x = 'TITLE';
const regex = new RegExp(`(\\[${x}(?:\\|[^\\][]*)?)]`, 'gi');
str = str.replace(regex, "$1|suffix=z]");
console.log(str);
// => Lorem ipsum [TITLE|prefix=a|suffix=z] dolor [sit] amet [consectetur]


推荐阅读