使用要查找的键数组查找和替换,以及要替换的数组值

时间:2013-02-07 13:29:45

标签: javascript jquery regex arrays replace

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

提前感谢您的帮助。

2 个答案:

答案 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;
    });
});