2016-07-06 50 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

    這是事實,但我認爲你需要所有的可點擊鏈接,考慮到這一點:
    「我不能點擊它們,因爲它們不存在」。
    如果您指出的情況也需要考慮,那麼解決方案將不得不進行修改。它只是在玩正則表達式。 –