我有以下字符串和正则表达式:
var string = "Dear [to name], [your name] has decided to share this [link]";
var patt = /\[+[A-Za-z0-9]+\]/;
我希望能够使用动态输入更改每个括号中的变量。我如何使用match()
或replace()
来定位此正则表达式的第1,第2和第3次出现?
编辑:目前,如果我执行document.write(body.match(patt));
之类的操作,它只会匹配最后一个[链接]
编辑:整个字符串取自文本框的值。每个括号的值都取自其他文本输入,需要在将文本放回文本框之前插入到字符串中。
答案 0 :(得分:10)
使用函数作为replace
方法的第二个参数:
var replacement = { "to name": "Joe", "your name": "Fred", "link": "foo" };
string = string.replace(/\[([^\]]+)\]/g, function (_, group) {
return replacement[group];
});
哦,你的模式只匹配[link]
文本的原因是因为它只允许括号之间的字母数字字符,而不是空格。
编辑:如果括号的内容不重要,而您只想按顺序替换它们,请使用数组而不是哈希:
var replacement = [ "Joe", "Fred", "foo" ];
var index = 0;
string = string.replace(/\[[^\]]+\]/g, function () {
return replacement[index++];
});
答案 1 :(得分:3)
假设这些括号中的项目始终相同,则根本不必使用正则表达式。
var string = "Dear [to name], [your name] has decided to share this [link]";
var name = 'Bob';
var your_name = 'Jacob';
var link = 'http://google.com';
string = string.replace( '[to name]', name ).replace( '[your name]', your_name ).replace( '[link]', link )
alert( string )