替换字符串的特定部分

时间:2017-07-12 11:51:19

标签: javascript regex

我有以下字符串:

dynamic[elements][0][slider][image1]

也可能是:

dynamic[elements][0][slider][image1]
dynamic[elements][0][abc][image1]
dynamic[elements][0][static][image1]
dynamic[elements][0][fronter][image1]
dynamic[elements][0][xyz][image1]

我想首先改变"动态"到"主要"然后是滑块,abc,静态,fronter或xyz(或完全不同的东西)到"值"

所以我要找的解决方案应该返回:

main[elements][0][value][image1]
main[elements][0][value][image1]
main[elements][0][value][image1]
main[elements][0][value][image1]
main[elements][0][value][image1]

如何实现这一目标?我认为针对第三个[]的预编辑可能是一个解决方案,所以我尝试了以下内容:

var line = 'dynamic[elements][0][value][image1]';
line.replace('dynamic', 'main');
line.replace(/\[.*?\]/g, 'value');

但我不知道如何替换第三个括号内容,而上述尝试并没有真正起作用。

1 个答案:

答案 0 :(得分:3)

您可以使用

.replace(/^[^\][]*(\[[^\][]*]\[\d+]\[)[^\][]*(].*)/g, 'main$1value$2')

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • [^\][]* - 除[]
  • 以外的0个字符
  • (\[[^\][]*]\[\d+]\[) - 第1组匹配:
    • \[ - 文字[
    • [^\][]* - 除[]以外的0个或更多字符
    • ]\[ - 文字][子字符串
    • \d+ - 一位或多位
    • ]\[ - 文字][子字符串
  • [^\][]* - 除[]
  • 以外的0个字符
  • (].*) - 第2组匹配],然后是除了换行符之外的任何0 +字符。

注意:字符类中的]必须转义,而在字符类之外,则不必转义。

main$1value$2是在开始时插入main的替换模式,然后粘贴第1组内容(使用$1反向引用),然后插入value然后插入内容第2组。

&#13;
&#13;
var ss = ['dynamic[elements][0][slider][image1]', 'dynamic[elements][0][abc][image1]', 'dynamic[elements][0][static][image1]', 'dynamic[elements][0][fronter][image1]', 'dynamic[elements][0][xyz][image1]'];
var rx = /^[^\][]*(\[[^\][]*]\[\d+]\[)[^\][]*(].*)/g;
var subst = "main$1value$2";
for (var s of ss) {
 console.log(s, "=>", s.replace(rx, subst));
}
&#13;
&#13;
&#13;