2011-04-18 79 views
1

我試圖用一段文本的函數結果替換textarea元素中的所有鏈接。JavaScript替換帶有文本中每個匹配的函數結果的文本

例子:

 

url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g; 
Text = "Text with link inside www.stackoverflow.com"; 
text.replace(url, convert(RESULT)); 
document.write(text); 

function convert(link){ 
    return " XX " + link + "XX"; 
} 

我需要的是,在該字符串中的每一個環節,轉換爲:通過XX或任何其他字符串包圍。 事實上,我需要將文本中的每個鏈接發送到該功能,因此我可以替換它們中的每一個。

我一直在搜索槽幾個小時。試了很多東西。什麼都沒有

有關如何做到這一點的任何想法?

在此先感謝!

回答

2

有幾個問題。

  1. replace函數允許引用一個函數作爲它的第二個參數。你是呼叫convert函數,不通過引用。
  2. replace函數不會修改原始字符串。你需要保存結果。
  3. 您正在嘗試在定義之前使用convert

全部放在一起:

function convert(link) { 
    return " XX " + link + "XX"; 
} 
var url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g; 
var text = "Text with link inside www.stackoverflow.com"; 
text = text.replace(url, convert); 

輸出:

"Text with link inside XX www.stackoverflow.comXX" 
+0

對!有用。但是如何替換文本中的所有URL?我們假設現在的文本是:「這是一個鏈接www.stackoverflow.com.br,這裏是另一個鏈接www.google.com」。它只取代第一個鏈接。 – 2011-04-18 22:40:58

+0

@Rafael - 你確定?適用於我的多個鏈接。 – 2011-04-18 23:20:10

+0

好吧,它確實有效,但現在我陷入了另一個問題。重寫鏈接執行器的函數GET請求。當我調用函數時,它會重寫爲「undefined」。我認爲它在函數捕獲請求的結果之前重寫。整個功能如下。 – 2011-04-19 16:15:13

1

String#replace不修改接收器,因爲JavaScript中的字符串是不可變的。你想這個代替:

url = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g; 
text = "Text with link inside www.stackoverflow.com"; 
text = text.replace(url, convert(RESULT)); 
document.write(text); 

function convert(link){ 
    return " XX " + link + "XX"; 
} 

而且,你有一個參考Text,而不是text我已經改正了。

+0

感謝布萊恩,我剛剛寫了錯,但這不是問題。 – 2011-04-18 22:40:27

相關問題