我有
mystring = "Google"
我有数组
myarray = ["o", "o", "e"]
我想做类似的事情
mystring.replace(myarray, "<b>$</b>")
所以它会返回 G<b>o</b><b>o</b>gl<b>e</b>
- 来自数组的每个匹配字母都包含在标签中。
我也有合适的正则表达式 /.*?(o).*?(o).*(e).*/i
具有 o 后跟 o 后跟 e 的匹配组。
那些数组和字符串是自动生成的(模糊搜索)所以我不能说数组和字符串有多大。我只知道要在字符串中查找的字母。
最佳答案
你可以这样做:
mystring = "Google";
myarray = ["o", "o", "e"];
var r = mystring.replace(new RegExp( '(' + myarray.join('|') + ')', 'g'), "<b>$1</b>");
//=> G<b>o</b><b>o</b>gl<b>e</b>
编辑:基于以下讨论:
mystring = "Google";
myarray = ["g", "o", "e"];
var r = mystring;
for (var i in myarray) {
r = r.replace(new RegExp('('+myarray[i]+')(?!<\\/b>)', "i"), "<b>$1</b>");
}
console.log(r); // <b>G</b><b>o</b>ogl<b>e</b>
PS:由于使用了negative lookahead (?!<\/b>)
同一个字母不会被替换两次。
JSFiddle
关于Javascript - 根据数组替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450609/