कई बार मैं match
यह जानने के लिए स्ट्रिंग फ़ंक्शन का उपयोग कर रहा हूं कि क्या स्ट्रिंग एक नियमित अभिव्यक्ति से मेल खाती है।
if(str.match(/{regex}/))
क्या इसमें कोई अंतर है:
if (/{regex}/.test(str))
वे एक ही परिणाम देने लगते हैं?
कई बार मैं match
यह जानने के लिए स्ट्रिंग फ़ंक्शन का उपयोग कर रहा हूं कि क्या स्ट्रिंग एक नियमित अभिव्यक्ति से मेल खाती है।
if(str.match(/{regex}/))
क्या इसमें कोई अंतर है:
if (/{regex}/.test(str))
वे एक ही परिणाम देने लगते हैं?
जवाबों:
सबसे पहले, देखते हैं कि प्रत्येक फ़ंक्शन क्या करता है:
regexObject । परीक्षण ( स्ट्रिंग )
एक नियमित अभिव्यक्ति और एक निर्दिष्ट स्ट्रिंग के बीच मैच की खोज को निष्पादित करता है। सच्चा या झूठा लौटाता है ।
तार । मैच ( RegExp )
एक नियमित अभिव्यक्ति के खिलाफ एक स्ट्रिंग से मेल खाते समय मैचों को पुनः प्राप्त करने के लिए उपयोग किया जाता है। मैचों के साथ एक सरणी देता है या
null
यदि कोई नहीं है।
चूंकि null
मूल्यांकन करने के लिए false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
क्या प्रदर्शन को लेकर कोई मतभेद है?
जी हां । मुझे यह छोटा नोट MDN साइट में मिला :
यदि आपको यह जानने की जरूरत है कि क्या एक स्ट्रिंग एक रेगुलर एक्सप्रेशन रेगेक्सप से मेल खाता है, तो रेगेक्सपीस्ट (स्ट्रिंग) का उपयोग करें।
क्या अंतर महत्वपूर्ण है?
एक बार और जवाब हां है ! इस jsPerf को मैंने एक साथ रखा है यह अंतर दिखाता है ~ 30% - ~ 60% ब्राउज़र के आधार पर:
.test
यदि आप तेजी से बूलियन जांच चाहते हैं तो इसका उपयोग करें। वैश्विक ध्वज .match
का उपयोग करते समय सभी मैचों को पुनः प्राप्त करने के लिए उपयोग करें g
।
.test()
। :)
अपने फ्लैगशिप में वैश्विक ध्वज को ध्यान में रखना न भूलें:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
ऐसा इसलिए होता है क्योंकि जब नया मैच मिलता है, तो Regexp lastIndex पर नज़र रखता है।
.test()
? यह .test()
जांचने की बात नहीं है कि क्या स्ट्रिंग में एक मिलान regexp है?
यह मेरे बेंचमार्क परिणाम हैं
परीक्षण 4,267,740 ऑप्स / सेकंड 40 1.32% (60 रन नमूना)
निष्पादित 3,649,719 ऑप्स / सेकंड 19 2.51% (60 रन से नमूना)
मैच 3,623,125 ऑप्स / सेकंड 125 1.85% (62 रन नमूना)
इंडेक्सऑफ 6,230,325 ऑप्स / सेकंड (0.95% (62 रनों का नमूना)
परीक्षण विधि मैच विधि की तुलना में तेज़ है, लेकिन सबसे तेज़ विधि इंडेक्सऑफ़ है