猿问

替换字符串的一个字符

我有一个看起来像这样的字符串[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]等等。


我如何使用 RegEx 执行此操作?


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


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');但这没有帮助。



沧海一幻觉
浏览 91回答 2
2回答

子衿沉夜

您需要记住在常规字符串文字中使用\\来定义单个文字反斜杠。然后,你需要一个像这样的模式/(\[TITLE(?:\|[^\][]*)?)]/gi请参阅正则表达式演示。细节:(\[TITLE\|[^\][]*)- 捕获第 1 组:\[TITLE-[TITLE文本(?:\|[^\][]*)?- 可选择出现一个|字符,后跟除]and之外的 0 个或多个字符[]- 一个]字符。在您的 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]

森栏

我认为您的问题的解决方案与此类似:let str = 'Lorem ipsum [TITLE|prefix=a] dolor [sit] amet [consectetur]';str = str.replace(/(\[[^\|\]]+)(\|[^\]]*)?\]/g, "$1$2|suffix=z]");console.log(str);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答