0

我在 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>');

在此先感谢您的帮助。

保罗

4

2 回答 2

3

改变这个:

"\b(" + key + ")\b"

对此:

"\\b(" + key + ")\\b"

\b在字符串文字中表示退格字符。即使它没有任何特殊含义,要\在字符串中指定,您也需要对其进行转义:\\. 否则,\只会蒸发,或者会抛出语法错误。

于 2013-02-07T13:32:34.223 回答
0

你可以把它转过来,替换你能找到的任何单词。这样,您只需遍历每个段落文本一次即可执行实际替换。

此解决方案查找每个段落中的所有单词,使用(\w+)并查看内容是否与您的wordlist对象匹配。当找到它时,它会进行替换,如果没有,它将不理会该词。

$('p').html(function(index, old) {
  return old.replace(/(\w+)/g, function($0, $1) {
        return wordlist[$1] || $0;
    });
});
于 2013-02-07T13:53:12.110 回答