2010-03-15 39 views
73

您可以在JavaScript中的反向引用這樣的:JavaScript的 - 字符串的正則表達式反向引用

var str = "123 $test 123"; 
str = str.replace(/(\$)([a-z]+)/gi, "$2"); 

這將(相當愚蠢的)替換 「$測試」 和 「測試」。但想象一下,我想將$ 2的結果字符串傳遞給一個函數,該函數返回另一個值。我試過這樣做,但沒有得到字符串「測試」,我得到「$ 2」。有沒有辦法做到這一點?

// Instead of getting "$2" passed into somefunc, I want "test" 
// (i.e. the result of the regex) 
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2")); 

回答

103

像這樣:

str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); }) 
+0

真棒,我在哪裏可以找到更多這方面的信息? – quano 2010-03-15 14:54:20

+7

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace – SLaks 2010-03-15 14:55:52

+10

很酷。澄清:'$ 1'和'$ 2'是用戶選擇的參數名稱(選擇模仿反向引用符號); - 變化! - 這些參數的數量對應於正則表達式中捕獲組的數量。 – mklement0 2013-05-01 22:48:02

28

傳遞一個函數作爲第二個參數replace

str = str.replace(/(\$)([a-z]+)/gi, myReplace); 

function myReplace(str, group1, group2) { 
    return "+" + group2 + "+"; 
} 

這種能力已自1.3的Javascript據mozilla.org

-1

注:先前的答案缺少一些代碼。現在已經修復+示例。


我需要一些更靈活的正則表達式替換爲Unicode在我傳入的JSON數據進行解碼:

var text = "some string with an encoded 's' in it"; 

text.replace(/&#(\d+);/g, function() { 
    return String.fromCharCode(arguments[1]); 
}); 

// "some string with an encoded 's' in it" 
相關問題