我有以下字符串:
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');
但我不知道如何替换第三个括号内容,而上述尝试并没有真正起作用。
答案 0 :(得分:3)
您可以使用
.replace(/^[^\][]*(\[[^\][]*]\[\d+]\[)[^\][]*(].*)/g, 'main$1value$2')
请参阅regex demo。
<强>详情:
^
- 字符串开头[^\][]*
- 除[
和]
(\[[^\][]*]\[\d+]\[)
- 第1组匹配:
\[
- 文字[
[^\][]*
- 除[
和]
以外的0个或更多字符]\[
- 文字][
子字符串\d+
- 一位或多位]\[
- 文字][
子字符串[^\][]*
- 除[
和]
(].*)
- 第2组匹配]
,然后是除了换行符之外的任何0 +字符。注意:字符类中的]
必须转义,而在字符类之外,则不必转义。
main$1value$2
是在开始时插入main
的替换模式,然后粘贴第1组内容(使用$1
反向引用),然后插入value
然后插入内容第2组。
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;