2016-07-06 97 views
-2

我正在运行JavaScript,它将替换浏览器文本内容中的某些单词。JavaScript替换不在URL中的单词

但是我不希望它替换url中的单词。

UPDATE:

例如,如果我把它换成XY,我搜索X搜索引擎内,与X任何URL链接在它与Y取代 - 我无法点击因为它们不存在(和/或它们不正确)。

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

我该怎么做?

+0

你是什么意思的“网址内的话”?还有什么你的意思是“他们坏了”?你能编辑你的问题更具体吗? – nem035

+0

比你不能使用整个文档的innerHTML,你将需要去逐个元素并替换文本。另外,当这个词已经标记出来时,你的目标就会失败。 'w ord'将会失败。 – epascarello

+0

*替换我浏览器中的某些单词* - 您无法替换浏览器中的单词。它可能会取代文字内容中的文字。显示您的当前内容和预期结果 – RomanPerekhrest

回答

0

这真的很难做到这一点(我的意思是,它太宽),但我建议你做的是,在这几个步骤:

  1. 首先你应该匹配所有URL,并将它们存储在某些阵列(例如var urls = [];
  2. 也然后替换一些独特的字符序列的所有URL,这是不是一定能在浏览器的内容(例如~~~~~
  3. 然后做你的clasical代替,像document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");
  4. 最后匹配新REPL aced浏览器的内容全部是你的特色字符序列(~~~~~),并用存储在你的数组中的URL(urls)以相同的顺序将它们替换回来。

匹配的网址:

关于匹配的网址,你需要匹配的URL的好正则表达式。这很难做到。见hereherehere

......几乎所有的东西是一个有效的URL。有 是 拆分它的一些标点规则。如果没有任何 标点符号,您仍然有一个有效的 网址。

仔细检查RFC,看看您的 是否可以构建“无效”URL。 规则非常灵活。

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

另外,/////是有效的URL。网址(“主机名”)的 是""。路径 是"///"。再次,愚蠢。另外 有效。该URL标准化为"///" 这是等效的。

类似"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); 
}); 

我希望它会做至少有一点帮助你。

0

下面是一个简单的解决方案:
1.更换网址所有的 “字” S与 “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"); 
} 
  • 更换你的文字内容和往常一样
    document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");

  • 带回的原词中的URL
    for (url in urls) { if (typeof urls[url].href === "string") urls[url].href = urls[url].href.replace(/tempuniqueflag/,"word"); }

  • +0

    这将无法正常工作......您如何匹配所有网址?没有书面说明,该网址位于'...网址可能也以纯文本的形式出现在其他标记中,如在'

    ...

    '内。 – Legionar

    +0

    这是事实,但我认为你需要所有的可点击链接,考虑到这一点:
    “我不能点击它们,因为它们不存在”。
    如果您指出的情况也需要考虑,那么解决方案将不得不进行修改。它只是在玩正则表达式。 –