JavaScript替换网址

时间:2016-07-06 13:45:21

标签: javascript html url replace

我正在运行JavaScript来替换浏览器文本内容中的某些字词。

但我不希望它取代网址中的字词。

更新

例如,如果我已将X替换为Y,并且我在搜索引擎中搜索X,则其中包含X的所有网址都是替换为Y - 我无法点击它们,因为它们不存在(和/或它们不正确)。

document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");

我该怎么做?

2 个答案:

答案 0 :(得分:0)

这真的很难(我的意思是,它太宽泛了),但我建议你在这几个步骤中这样做:

  1. 首先,您应匹配所有网址并将其存储在某个数组中(例如var urls = [];
  2. 还会使用一些独特的字符序列替换所有网址,这些在浏览器的内容中无法确定(例如~~~~~
  3. 然后进行你的clasical替换,如document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");
  4. 并最终在您新替换的浏览器内容中匹配所有特殊字符序列(~~~~~)并将其替换为与您的数组中存储的网址相同的顺序(urls)。
  5. 匹配网址

    关于匹配网址,您需要一个与网址匹配的正确的正则表达式。这很难做到。请参阅hereherehere

      

    ...几乎任何东西都是有效的网址。那里   是一些标点规则   把它分开。没有任何人   标点符号,你仍然有效   URL。

         

    仔细检查RFC并查看是否存在   可以构造一个“无效”的URL。该   规则非常灵活。

         

    例如:::::是有效的网址。   路径为":::::"。一个漂亮   愚蠢的文件名,但有效的文件名。

         

    此外,/////是有效的网址。该   netloc(“hostname”)是""。路径   是"///"。再次,愚蠢。也   有效。此网址规范化为"///"   这是等价的。

         

    "bad://///worse/////"之类的东西   完全有效。愚蠢但有效。

    无论如何,这个答案并不是为了给你提供最好的正则表达式,而是用JavaScript来证明如何在文本中进行字符串换行。

    好的,让我们使用这个:/(https?:\/\/[^\s]+)/g

    再次,这是一个糟糕的正则表达式。它会有很多误报。但是这个例子已经足够了。

    function urlify(text) {
        var urlRegex = /(https?:\/\/[^\s]+)/g;
        return text.replace(urlRegex, function(url) {
            return '<a href="' + url + '">' + url + '</a>';
        })
        // or alternatively
        // return text.replace(urlRegex, '<a href="$1">$1</a>')
    }
    
    var text = "Find me at http://www.example.com and also at http://stackoverflow.com";
    var html = urlify(text);
    
    // html now looks like:
    // "Find me at <a href="http://www.example.com">http://www.example.com</a> and also at <a href="http://stackoverflow.com">http://stackoverflow.com</a>"
    

    总而言之,尝试:

    $$('#pad dl dd').each(function(element) {
        element.innerHTML = urlify(element.innerHTML);
    });
    

    我希望它能为你提供至少一点帮助。

答案 1 :(得分:0)

这是一个简单的解决方案:
1.用“tempuniqueflag”替换网址中的所有“单词”(注意单词不是tempuniqueflag的子串)

var urls = document.querySelectorAll('a');
for (url in urls) {
  if (typeof urls[url].href === "string") 
    urls[url].href = urls[url].href.replace(/word/,"tempuniqueflag");
}
  1. 照常更换文字内容
    document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");

  2. 将原始字词带回网址 for (url in urls) { if (typeof urls[url].href === "string") urls[url].href = urls[url].href.replace(/tempuniqueflag/,"word"); }