2010-03-15 15 views
73

आप जावास्क्रिप्ट में इस तरह backreference कर सकते हैं:जावास्क्रिप्ट - स्ट्रिंग regex backreferences

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

+7

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace – SLaks

+10

कूल। स्पष्टीकरण के लिए: '$ 1' और' $ 2' उपयोगकर्ता द्वारा चुने गए पैरामीटर नाम यहां हैं (बैकरेफर प्रतीकों की नकल करने के लिए चुना गया है); - अलग-अलग! - इन पैरामीटरों की संख्या रेगेक्स में कैप्चर समूहों की संख्या से मेल खाती है। – mklement0

28

replace से पीछे तर्क के रूप में एक समारोह दर्रा:

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

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

यह क्षमता जावास्क्रिप्ट 1.3 के बाद से आसपास किया गया है, mozilla.org के अनुसार।

-1

नोट: पिछला उत्तर कुछ कोड गुम था। यह अब तय + उदाहरण है।


मैं कुछ एक regex के लिए और अधिक लचीला एक सा मेरी भेजे 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" 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^