Javascript-如何替换页面内容中的单词

Javascript-如何替换页面内容中的单词,javascript,regex,substitution,Javascript,Regex,Substitution,因此,我有一个大约1000个单词的列表,如果它们出现在页面上,就会被替换为其他单词。我试着用正则表达式来表达,所以对于这一千个单词中的每一个,我都会这样替换内容: var pattern = new RegExp("(.*?)([^A-Za-z_/\-]+)("+title+")([^A-Za-z_\./\-]+)(.*?)","ig"); content = content.replace( pattern, function replacer(contents,start,

因此,我有一个大约1000个单词的列表,如果它们出现在页面上,就会被替换为其他单词。我试着用正则表达式来表达,所以对于这一千个单词中的每一个,我都会这样替换内容:

    var pattern = new RegExp("(.*?)([^A-Za-z_/\-]+)("+title+")([^A-Za-z_\./\-]+)(.*?)","ig");

    content = content.replace( pattern, function replacer(contents,start,before,value,after,end) {

    var key = value.toLowerCase();

但这种方法的速度非常慢。另一种方法是将页面内容拆分为单词,然后检查是否有任何部分与任何关键字相等。问题是我有1000个关键词,所以在一个有10000个单词的页面上,我必须循环浏览10000 X 1000个项目,这可能会使浏览器崩溃


有人知道用什么好方法替换页面上的单词吗

这很慢,因为对于每个单词,您都要再次测试整个内容。最好为任何单词创建正则表达式,然后在散列中查找:

// Make your "dictionary" first:
var replacements = {
    "replace": "R",
    "this": "T",
    "etc": "..."
};

var content = "Should replace this with letters.";

var output = content.replace(/\w+/g, function replacer(word) {
    return replacements[word.toLowerCase()] || word;
});

console.log(output);
输出为:

应该用字母表示。

其中至少有一部分与相关,其代码用于创建Chrome插件。:-)“问题是我有一千个关键字”如果你可以预先构建
{keyword:'value'}
散列,这不是问题。整个操作将是
O(n)
,其中
n
是文本中的单词数。假设不是每个单词都是唯一的,你可以索引单词,获取唯一的值,然后比较前3,5,或7个字母,替换值,然后重新生成字符串。编辑:已删除\b内容:不需要,因为\w+将始终匹配单词的开头和结尾。俘虏小组也不是,这很有效!我现在需要弄清楚的一件事是,如何只匹配那些不出现在诸如或标记之类的内容中的单词?要做到这一点,您可能必须遍历DOM并一次处理一个节点的文本(除非它是不应该处理的节点)。