我在jQuery中编写了以下内容:
$(document).ready(function() {
var wordlist = new Array();
wordlist['BioResource'] = 'Bio Resource is a lorem';
var array_length = wordlist.length;
for(var key in wordlist) {
$("p").html(function(index, value) {
return value.replace(new RegExp("\b(" + key + ")\b", "gi"), '<a href="#" class="test" title="'+wordlist[key]+'">$1</a>');
});
}
});
它应该(但不是)循环通过wordlist数组,并且对于每个键,尝试在任何段落标记中找到该单词并将其替换为自身,但包装在具有适当值的标题标记的锚中那个键上的数组。
我做错了什么?
如果我从中移除数组方面并直接输入键和值,则正则表达式本身正在工作:
return value.replace(/\b(BioResource)\b/gi, '<a href="#" class="test" title="'+wordlist['BioResource']+'">$1</a>');
提前感谢您的帮助。
保
答案 0 :(得分:3)
改变这个:
"\b(" + key + ")\b"
对此:
"\\b(" + key + ")\\b"
字符串文字中的 \b
表示退格字符。即使它没有任何特殊含义,要在字符串中指定\
,您需要将其转义:\\
。否则,\
将会蒸发,否则将引发语法错误。
答案 1 :(得分:0)
你可以转过来替换你能找到的任何单词。这样,您只需迭代每个段落文本一次即可执行实际替换。
此解决方案使用(\w+)
查找每个段落中的所有单词,并查看内容是否与wordlist
对象匹配。当发现它取代时,如果没有,它将单独留下这个词。
$('p').html(function(index, old) {
return old.replace(/(\w+)/g, function($0, $1) {
return wordlist[$1] || $0;
});
});