2012-09-10 48 views
0

我試圖創建一個JavaScript腳本來突出顯示頁面上的某些文本。現在我有問題試圖用其他文本替換文本(從正文HTML)。我想用其他文本替換數組highlights中每個項目的所有實例。替換變量時JavaScript字符串replace()不工作

,我正在使用的代碼是:

var responseText = server.responseText; 
    var highlights = responseText.split("\n"); 
    var text = document.body.innerHTML; 

    for (i in highlights) { 
     if (highlights[i].length > 1) { 
      var exp = new RegExp(highlights[i], "g"); 
      console.log(exp); 
      console.log(highlights[i]); 
      text = text.replace(exp, "XXXXXXXXXXX"); 
     } 
    } 

    document.body.innerHTML = text; 

目前,我得到了正確的價值爲打印和highlights[i]我認爲我的正則表達式exp;如果highlights[i]是'記住',那麼我得到的exp的打印輸出是'/ Remember/g'(不帶引號) - 但它並不代替頁面上的'記住'一詞。 '如果我用new RegExp()中的highlights[i]替換字符串「Remember」,它可以正常工作。有什麼錯誤的想法?

編輯: 我解決了這個問題!在創建RegExp()時,我通過了highlights[i].trim()而不是僅僅通過highlights[i]來消除開始/結束處的空白,並且現在似乎正在工作。

+5

不要使用'爲..in'通過陣列迭代,使用普通的for循環。 – Musa

+0

'/ Remember/g'有什麼問題? – Thilo

+1

您可以通過現場演示重現此行爲嗎? [JS小提琴](http://jsfiddle.net/),或類似? –

回答

2

您的多行server.responseText存在一些問題。 我替換爲空格代替換行輸入,所有的替換工作的優良:

http://jsfiddle.net/XTdgJ/1/

+0

好的,所以我在創建正則表達式之前在每一行調用了trim()(清理它們),現在它似乎正在工作。我以爲我早些時候已經嘗試過了,但我猜不是。 – scaevity

+0

@scae換行符通常很難在控制檯中檢測到! – DhruvPathak