這真的很難做到這一點(我的意思是,它太寬),但我建議你做的是,在這幾個步驟:
- 首先你應該匹配所有URL,並將它們存儲在某些陣列(例如
var urls = [];
)
- 也然後替換一些獨特的字符序列的所有URL,這是不是一定能在瀏覽器的內容(例如
~~~~~
)
- 然後做你的clasical代替,像
document.body.innerHTML = document.body.innerHTML.replace(/word/gi, "newword");
- 最後匹配新REPL aced瀏覽器的內容全部是你的特色字符序列(
~~~~~
),並用存儲在你的數組中的URL(urls
)以相同的順序將它們替換回來。
匹配的網址:
關於匹配的網址,你需要匹配的URL的好正則表達式。這很難做到。見here,here和here:
......幾乎所有的東西是一個有效的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);
});
我希望它會做至少有一點幫助你。
你是什麼意思的「網址內的話」?還有什麼你的意思是「他們壞了」?你能編輯你的問題更具體嗎? – nem035
比你不能使用整個文檔的innerHTML,你將需要去逐個元素並替換文本。另外,當這個詞已經標記出來時,你的目標就會失敗。 'w ord'將會失敗。 – epascarello
*替換我瀏覽器中的某些單詞* - 您無法替換瀏覽器中的單詞。它可能會取代文字內容中的文字。顯示您的當前內容和預期結果 – RomanPerekhrest