पूरे स्ट्रिंग का मिलान करें


165

नियमित अभिव्यक्ति क्या है (जावास्क्रिप्ट में अगर यह मायने रखता है) केवल मिलान करने के लिए अगर पाठ एक सटीक मैच है? यही है, स्ट्रिंग के दूसरे छोर पर कोई अतिरिक्त वर्ण नहीं होना चाहिए।

उदाहरण के लिए, अगर मैं के लिए मैच के लिए कोशिश कर रहा हूँ abc, तो 1abc1, 1abcहै, और abc1मेल नहीं होता।


5
Regex के लिए नए लोगों के लिए, इस बात के लिए दो अच्छे उत्तर हैं, इस बात पर निर्भर करता है कि आप क्या खोज रहे हैं। प्रश्नकर्ता वास्तव में चाहता है \babc\b, जो उदाहरण के 123 abc 123लिए मेल खाने की अनुमति देगा abc(लेकिन प्रश्न में नकारात्मक उदाहरण नहीं); हालाँकि, ^abc$यह सुनिश्चित कर देगा कि aस्ट्रिंग की शुरुआत में है और cअंत में है - अन्यथा यह मेल नहीं खाएगा।
एंड्रयू

जवाबों:


305

आरंभ और अंत परिसीमन का उपयोग करें: ^abc$


3
@ जेक, मुझे खुशी है कि हावर्ड उत्तर ने काम किया, लेकिन मुझे लगता है कि आपको ध्यान देना चाहिए कि यह केवल तभी काम करेगा जब स्ट्रिंग में केवल एबीसी एकमात्र आइटम हो। उदाहरण के लिए, यह 'वर्णमाला में पहले 3 अक्षर abc' से मेल नहीं खाता
Matchew

यह मेरे लिए काम करता है, शायद मेरा उदाहरण मैच के लक्ष्य के रूप में "एबीसी डीआई गिई" होना चाहिए था।
जेक पीयरसन

@ जेक अगर आपका तार "एबीसी डीई गि" था तो / ^ एबीसी $ / काम नहीं करेगा। ex: jsfiddle.net/XUyAc
matchew

2
मुझे लगता है कि अगर मुझे "abc def ghi" से मेल खाना है तो मेरा रेगेक्स होगा^abc def ghi$
Jake Pearson

2
नोट: विकल्प के साथ एक पैटर्न बनाने के लिए एक पूरे स्ट्रिंग से मेल खाता है, इसे एक गैर (गैर) कैप्चरिंग समूह के साथ लपेटना आवश्यक हो सकता है: /^(?:abc|def)$/या /^(abc|def)$/। अन्यथा, यदि समूह का उपयोग नहीं किया जाता है, तो स्ट्रिंग की शुरुआत में या स्ट्रिंग के अंत में /^abc|def$/मेल खाएगा । abcdef
विकटोरिया स्ट्राइब्यू

40

निर्भर करता है। आप ऐसा कर सकते हैं

string.match(/^abc$/)

लेकिन यह निम्नलिखित स्ट्रिंग से मेल नहीं खाता: 'वर्णमाला के पहले 3 अक्षर abc हैं। abc123 नहीं

मुझे लगता है कि आप उपयोग करना चाहेंगे \b(शब्द सीमाएँ):

var str = 'the first 3 letters of the alphabet are abc. not abc123';
var pat = /\b(abc)\b/g;
console.log(str.match(pat));

लाइव उदाहरण: http://jsfiddle.net/uu5VJ/

यदि पूर्व समाधान आपके लिए काम करता है, तो मैं इसका उपयोग करने के खिलाफ सलाह दूंगा।

इसका मतलब है कि आपके पास कुछ इस तरह हो सकता है:

var strs = ['abc', 'abc1', 'abc2']
for (var i = 0; i < strs.length; i++) {
    if (strs[i] == 'abc') {
        //do something 
    }
    else {
        //do something else
    }
}

जबकि आप उपयोग कर सकते हैं

if (str[i].match(/^abc$/g)) {
    //do something 
}

यह काफी अधिक संसाधन-गहन होगा। मेरे लिए, अंगूठे का एक सामान्य नियम एक साधारण स्ट्रिंग तुलना है जो एक सशर्त अभिव्यक्ति का उपयोग करता है, एक अधिक गतिशील पैटर्न के लिए एक नियमित अभिव्यक्ति का उपयोग करता है।

जावास्क्रिप्ट regexes पर अधिक: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions


12
@NiharSawant यह इसलिए है क्योंकि यह ओपी द्वारा पूछे गए सवाल का जवाब नहीं है। ओपी स्पष्ट रूप से वर्णमाला के पहले 3 अक्षर "" से मेल नहीं खाना चाहता है, और यहां दूसरा समाधान सामान्य रीजेक्स, जैसे / ^ [abc] + $ /
DJClayworth

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.