JavaScript由指数编号替换()正则表达式

kal*_*tch 5 javascript regex replace

我有以下字符串和正则表达式:

var string = "Dear [to name], [your name] has decided to share this [link]"; 
var patt = /\[+[A-Za-z0-9]+\]/;
Run Code Online (Sandbox Code Playgroud)

我希望能够使用动态输入更改每个括号中的变量.我如何使用match()replace()定位此正则表达式的第1,第2和第3次出现?

编辑:目前,如果我这样做的东西document.write(body.match(patt));只匹配最后一个[链接]

编辑:整个字符串取自文本框的值.每个括号的值都取自其他文本输入,需要在将文本放回文本框之前插入到字符串中.

Sea*_*ean 11

使用函数作为方法的第二个参数replace:

var replacement = { "to name": "Joe", "your name": "Fred", "link": "foo" };

string = string.replace(/\[([^\]]+)\]/g, function (_, group) {
    return replacement[group];
});
Run Code Online (Sandbox Code Playgroud)

哦,你的模式只匹配[link]文本的原因是因为它只允许括号之间的字母数字字符,而不是空格.

编辑:如果括号的内容不重要,您只想按顺序替换它们,请使用数组而不是哈希:

var replacement = [ "Joe", "Fred", "foo" ];
var index = 0;
string = string.replace(/\[[^\]]+\]/g, function () {
    return replacement[index++];
});
Run Code Online (Sandbox Code Playgroud)