यहां अधिकांश अभिव्यक्तियाँ एकल विशिष्ट उपयोग मामलों को हल करती हैं।
यह ठीक है, लेकिन मैं "हमेशा काम करता हूं" दृष्टिकोण पसंद करता हूं।
function regExpEscape(literal_string) {
return literal_string.replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&');
}
यह नियमित अभिव्यक्ति में निम्नलिखित में से किसी भी उपयोग के लिए शाब्दिक स्ट्रिंग "पूरी तरह से बच जाएगा":
- एक नियमित अभिव्यक्ति में सम्मिलन। उदाहरण के लिए
new RegExp(regExpEscape(str))
- चरित्र वर्ग में सम्मिलन। उदाहरण के लिए
new RegExp('[' + regExpEscape(str) + ']')
- पूर्णांक गणना विनिर्देशक में सम्मिलन। उदाहरण के लिए
new RegExp('x{1,' + regExpEscape(str) + '}')
- गैर-जावास्क्रिप्ट नियमित अभिव्यक्ति इंजन में निष्पादन।
कवर किए गए विशेष वर्ण:
-
: एक चरित्र वर्ग में एक चरित्र रेंज बनाता है।
[
/ ]
: एक चरित्र वर्ग को शुरू / समाप्त करता है।
{
/ }
: एक संख्यात्मक विनिर्देश को शुरू / समाप्त करता है।
(
/ )
: एक समूह को शुरू / समाप्त करता है।
*
/ +
/ ?
: पुनरावृत्ति प्रकार निर्दिष्ट करता है।
.
: किसी भी पात्र से मेल खाता है।
\
: पात्रों से बचता है, और संस्थाओं को शुरू करता है।
^
: मिलान क्षेत्र की शुरुआत निर्दिष्ट करता है, और एक चरित्र वर्ग में मिलान की उपेक्षा करता है।
$
: मिलान क्षेत्र का अंत निर्दिष्ट करता है।
|
: विकल्प निर्दिष्ट करता है।
#
: नि: शुल्क रिक्ति मोड में टिप्पणी निर्दिष्ट करता है।
\s
: मुक्त रिक्ति मोड में नजरअंदाज कर दिया।
,
: संख्यात्मक विनिर्देश में मूल्यों को अलग करता है।
/
: अभिव्यक्ति शुरू या समाप्त करता है।
:
: विशेष समूह प्रकारों को पूरा करता है, और पर्ल शैली के चरित्र वर्गों का हिस्सा है।
!
: शून्य-चौड़ाई वाला समूह।
<
/ =
: शून्य-चौड़ाई समूह विनिर्देशों का हिस्सा।
टिप्पणियाँ:
/
नियमित अभिव्यक्ति के किसी भी स्वाद में कड़ाई से आवश्यक नहीं है। हालांकि, यह किसी को (कंपकंपी) मामले में बचाता है eval("/" + pattern + "/");
।
,
यह सुनिश्चित करता है कि यदि स्ट्रिंग को संख्यात्मक विनिर्देशक में पूर्णांक माना जाता है, तो यह चुपचाप गलत संकलन के बजाय एक RegExp संकलन त्रुटि का कारण होगा।
#
, और \s
जावास्क्रिप्ट में भागने की जरूरत नहीं है, लेकिन कई अन्य स्वादों में करें। यदि बाद में किसी अन्य कार्यक्रम में नियमित अभिव्यक्ति दी जाएगी, तो वे यहां भाग जाते हैं।
यदि आपको जावास्क्रिप्ट रेगेक्स इंजन क्षमताओं के लिए संभावित परिवर्धन के खिलाफ नियमित अभिव्यक्ति को भविष्य में प्रूफ करने की आवश्यकता है, तो मैं और अधिकanan का उपयोग करने की सलाह देता हूं:
function regExpEscapeFuture(literal_string) {
return literal_string.replace(/[^A-Za-z0-9_]/g, '\\$&');
}
यह फ़ंक्शन हर वर्ण से बच जाता है, सिवाय इसके कि स्पष्ट रूप से गारंटीकृत न हो भविष्य के नियमित अभिव्यक्ति जायके में वाक्यविन्यास के लिए उपयोग किया जाए।
वास्तव में स्वच्छता-उत्सुक के लिए, इस किनारे के मामले पर विचार करें:
var s = '';
new RegExp('(choice1|choice2|' + regExpEscape(s) + ')');
यह जावास्क्रिप्ट में ठीक संकलित करना चाहिए , लेकिन कुछ अन्य स्वादों में नहीं होगा। यदि किसी अन्य स्वाद को पास करने का इरादा है, तो अशक्त मामले को s === ''
स्वतंत्र रूप से जांचना चाहिए, जैसे:
var s = '';
new RegExp('(choice1|choice2' + (s ? '|' + regExpEscape(s) : '') + ')');
RegExp.escape
वर्तमान में काम कर रहा है और जो कोई भी सोचता है कि उनके पास मूल्यवान इनपुट है, योगदान करने के लिए बहुत स्वागत है। कोर-जेएस और अन्य पॉलीफिल इसे पेश करते हैं।