我正在运行JavaScript来替换浏览器文本内容中的某些字词。
但我不希望它取代网址中的字词。
更新
例如,如果我已将X
替换为Y
,并且我在搜索引擎中搜索X
,则其中包含X
的所有网址都是替换为Y
- 我无法点击它们,因为它们不存在(和/或它们不正确)。
document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");
我该怎么做?
答案 0 :(得分:0)
这真的很难(我的意思是,它太宽泛了),但我建议你在这几个步骤中这样做:
var urls = [];
)~~~~~
)document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");
~~~~~
)并将其替换为与您的数组中存储的网址相同的顺序(urls
)。匹配网址
关于匹配网址,您需要一个与网址匹配的正确的正则表达式。这很难做到。请参阅here,here和here:
...几乎任何东西都是有效的网址。那里 是一些标点规则 把它分开。没有任何人 标点符号,你仍然有效 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");
}
照常更换文字内容
document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");
将原始字词带回网址
for (url in urls) {
if (typeof urls[url].href === "string")
urls[url].href = urls[url].href.replace(/tempuniqueflag/,"word");
}