2011-01-12 11 views
28

क्या मुझे नियमित अभिव्यक्ति में डालते समय मुझे स्लेश से बचने के लिए है?जावास्क्रिप्ट regex प्रतिस्थापित - slashes से बच

myString = '/courses/test/user'; 
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"); 
document.write(myString); 

"परीक्षण" प्रिंट करने के बजाय, यह पूरे स्रोत स्ट्रिंग को प्रिंट करता है।

http://jsbin.com/esaro3/2/edit

उत्तर

37

आपका regex एकदम सही है, और हाँ, आप स्लैश पलायन करना होगा क्योंकि जावास्क्रिप्ट regexes इंगित करने के लिए स्लैश का उपयोग करता है:

इस डेमो देखें।

हालांकि, समस्या यह है कि जावास्क्रिप्ट की replace विधि इन-प्लेस प्रतिस्थापन नहीं करती है। यही है, यह वास्तव में स्ट्रिंग को नहीं बदलता है - यह आपको प्रतिस्थापन का परिणाम देता है।

इस प्रयास करें:

myString = '/courses/test/user'; 
myString = myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"); 
document.write(myString); 

यह प्रतिस्थापित मूल्य के लिए myString सेट।

9

string.replace मूल स्ट्रिंग को संशोधित नहीं करता है। इसके बजाए, एक नई स्ट्रिंग देता है जिसने प्रतिस्थापन किया है।

प्रयास करें:

myString = '/courses/test/user'; 
document.write(myString.replace(/\/courses\/([^\/]*)\/.*/, "$1")); 
9

/[\/]/g आगे से मेल खाता है स्लैश।
/[\\]/g पिछड़े स्लेश से मेल खाता है।

+0

और '/ [\/| \\]/g' दोनों आगे और पिछड़े स्लैश से मेल खाते हैं। –

6

असल में, आपको अपने उदाहरण के एक हिस्से में एक चरित्र वर्ग के अंदर स्लैश से बचने की आवश्यकता नहीं है (यानी, [^\/]* बस [^/]* के रूप में ठीक है)। यदि यह एक चरित्र वर्ग के बाहर है (जैसे आपके शेष उदाहरण के साथ \/courses), तो आपको स्लेश से बचने की आवश्यकता है।

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