代码之家  ›  专栏  ›  技术社区  ›  John Slotsky

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

  •  2
  • John Slotsky  · 技术社区  · 8 年前

    所以我有一个大约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个条目,这可能会导致浏览器崩溃。

    有人知道在页面上替换单词的好方法吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Martin Stone    8 年前

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

    // 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);
    

    输出为:

    Should R T with letters.