2011-02-14 14 views
11

में काम नहीं कर रही है, मैं regex से बहुत परिचित नहीं हूं। मैं परीक्षण करने की कोशिश कर रहा था कि एक स्ट्रिंग एक और स्ट्रिंग के साथ समाप्त होता है। जब मैं सच की उम्मीद कर रहा था तो नीचे दिया गया कोड शून्य हो जाता है। कोड के साथ क्या गलत है?रेगेक्स स्ट्रिंग जावास्क्रिप्ट

var id = "John"; 
var exists ="blahJohn".match(/id$/); 
alert(exists); 

उत्तर

17

ठीक है, इस दृष्टिकोण के साथ, आप अपने id चर का उपयोग कर एक नियमित अभिव्यक्ति का निर्माण करने के RegExp constructor उपयोग करने के लिए, की आवश्यकता होगी:

var id = "John"; 
var exists = new RegExp(id+"$").test("blahJohn"); 
alert(exists); 

लेकिन इसे प्राप्त करने के कई तरीके हैं, उदाहरण के लिए, आप स्ट्रिंग के अंतिम id.length वर्ण ले सकते हैं, और इसकी तुलनासे कर सकते हैं:

var id = "John"; 
var exist = "blahJohn".slice(-id.length) == id; // true 
+0

' var id = "के $ ha"; ' –

0

इस प्रयास करें - यह करने के लिए

var reg = "/" + id + "$/"; 
var exists ="blahJohn".match(reg); 
+0

यह काम नहीं करता है। –

+1

@ टोनी - यह क्यों काम नहीं करता है? क्या आप कृपया समझा सकते हैं? मुझे लगता है कि यह ठीक काम करना चाहिए। –

1

अच्छे तरीके से उपयोग करने के लिए है RegExp.test:

(new RegExp(id + '$')).test('blahJohn'); // true 
(new RegExp(id + '$')).test('blahJohnblah'); // false 

यहां तक ​​कि अच्छे इस तरह एक साधारण समारोह का निर्माण करने के होगा:

function strEndsWith (haystack, needle) { 
    return needle === haystack.substr(0 - needle.length); 
} 

strEndsWith('blahJohn', id); // true 
strEndsWith('blahJohnblah', id); // false 
+0

आईई <9 पर 'substr' विधि बग्गी है, यह नकारात्मक सूचकांक को संभाल नहीं सकती है, उदाहरण के लिए, परीक्षण:' abc'.substr (-1) == 'c'' विफल रहता है, आईई का' सबस्ट्र 'पूरी स्ट्रिंग देता है। मैं इसके बजाए 'स्लाइस' की सिफारिश करूंगा। चीयर्स। – CMS

+0

@ सीएमएस धन्यवाद। मैं इसे बदल नहीं पाऊंगा, क्योंकि आपका उत्तर स्वीकार कर लिया गया है। – lonesomeday

2

आपको इसकी आवश्यकता होगी कि एक शाब्दिक नहीं करना है, एक RegExp() वस्तु का उपयोग करें:

var id = "John", 
    reg = new RegExp(id+"$"); 

alert(reg.test("blahJon")); 

है, तो आप आप क्रम से आगे के लिए परीक्षण कर रहे हैं मूल्य नहीं पता है। नहीं तो आप कर सकता है:

alert(/John$/.test("blahJohn")); 
+0

होना चाहिए /John$/.test("blahJohn ") – Claudijo

0
var id = new RegExp("John"); 
var exists ="blahJohn".match(id); 
alert(exists); 

कोशिश इस

0

RegExp का उपयोग क्यों करें? यह महंगा है।

function EndsWith(givenStr, subst) 
{ 
var ln = givenStr.length; 
var idx = ln-subst.length; 
return (giventStr.subst(idx)==subst); 
} 

बहुत आसान और लागत प्रभावी है, है ना?

+0

यह स्ट्रिंग है अगर स्ट्रिंग blahJohnblah –

+1

@StewieGriffin यह पूरी बात है, आपका उत्तर गलत है – iConnor

0

मुझे @ लोन्सोमेडे के समाधान पसंद हैं, लेकिन मैं इन परिदृश्यों में String.prototype को विस्तारित करने के प्रशंसक हूं। यहाँ उनके समाधान

String.prototype.endsWith = function (needle) { 
    return needle === this.substr(0 - needle.length); 
} 

तो

if(myStr.endsWith("test")) // Do awesome things here. 

स्वादिष्ट के साथ जाँच की जा सकती ...

-1

यहाँ की मेरी अनुकूलन एक स्ट्रिंग प्रोटोटाइप समारोह है कि regex का इस्तेमाल करता रहा है।

प्रोटोटाइप समारोह:

String.prototype.endsWith = function (endString) { 
    if(this && this.length) { 
     result = new RegExp(endString + '$').test(this); 
     return result; 
    } 
    return false; 
} 

उदाहरण उपयोग: आप यदि कोई स्ट्रिंग वस्तु एक विशेष स्ट्रिंग मान के साथ समाप्त होता जाँच करने के लिए उपयोग कर सकते हैं

var s1 = "My String"; 
s1.endsWith("ring"); // returns true; 
s1.endsWith("deez"); //returns false; 
+1

आप यह समझाया जाना चाहिए कि यह सवाल क्यों जवाब देता है। –

0

यह तुम्हारे लिए की जरूरत है फ़ंक्शन को प्रतिस्थापित करें, इस regExp पर विचार करें:

var eventStr = "Hello% World%"; 

eventStr = eventStr.replace(/[\%]$/, "").replace(/^[\%]/, ""); // replace eds with, and also start with %. 

// आउटपुट: eventStr = "हैलो% वर्ल्ड";

0
var id = "John"; 

(new RegExp(`${id}$`)).test('blahJohn'); // true 
(new RegExp(`${id}$`)).test('blahJohna'); // false 

`$ {आईडी} $` एक जावास्क्रिप्ट Template strings जो करने के लिए 'जॉन $' संकलित किया जाएगा है।

$ RegExp में जॉन के बाद स्ट्रिंग की अंत के लिए खड़ा है तो जांच की स्ट्रिंग क्रम परीक्षा उत्तीर्ण करने के लिए आईडी मान (अर्थात जॉन) के बाद कुछ भी नहीं करना चाहिए।

नया RegExp (`$ {id} $`) - इसे /John$/ पर संकलित करेगा (इसलिए यदि आईडी गतिशील नहीं होनी चाहिए तो आप नए RegExp (`$ {id} $` के बजाय केवल/जॉन $/का उपयोग कर सकते हैं।))

+2

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ तत्काल सहायता प्रदान कर सकता है। एक उचित स्पष्टीकरण [काफी सुधार होगा] (https://meta.stackexchange.com/q/114762) यह दिखाकर इसका शैक्षणिक मूल्य है कि यह समस्या का एक अच्छा समाधान क्यों है, और भविष्य के पाठकों के लिए इसे और अधिक उपयोगी बना देगा, लेकिन समान नहीं, प्रश्न। स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें, और संकेत दें कि कौन सी सीमाएं और धारणाएं लागू होती हैं। – GrumpyCrouton

+0

@GrumpyCrouton कूल, किया :)। आशा है कि मैंने जो स्पष्टीकरण जोड़ा है, वह समाधान को समझने में मदद करता है। – Alexander

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