मुझे पता है कि कुछ रेगेक्स/lastIndex
विसंगतियां हैं लेकिन यह मेरे लिए नया है!रेगेक्स/अंतिम इंडेक्स - अप्रत्याशित व्यवहार
अपेक्षित व्यवहार: एक नया नियमित अभिव्यक्ति (शाब्दिक/निर्माता के साथ) बनाना होगा, जाहिर है, एक नया RegExp ऑब्जेक्ट एक lastIndex
संपत्ति शून्य पर सेट के साथ पैदा करते हैं।
वास्तविक व्यवहार: (एफएफ, क्रोम में): अंतिम इंडेक्स संपत्ति एकाधिक RegExp रचनाओं के माध्यम से जारी रहती है।
उदा।
function foo(s) {
// A *NEW* regular expression
// is created on each call of foo():
var regex = /ABC/g;
document.write(regex.lastIndex + '<br/>');
// regex.test() updates lastIndex property
regex.test(s);
// This is where the regex's life should end...
// (Why does it persist?)
}
foo('ABC');
foo('ABCABC');
foo('ABCABCABC');
यहाँ देखें: http://jsbin.com/otoze
एक नया RegExp ऑब्जेक्ट हर कार्य कॉल (? दाएं), तो क्यों दस्तावेज़ में लिखा जा रहा पीछा कर रहा है पर बनाया जा रहा है ?? -
0
3
6
???
नोट, यह अजीबता एफएफ (3) और क्रोम (2) में होती है, लेकिन उत्सुकता से आईई नहीं है।
क्या यह अपेक्षित व्यवहार है, क्या आईई इसे गलत या सही बनाता है? क्या यह एक प्रसिद्ध बग है?
संपादित करें: इस जब एक शाब्दिक के बजाय एक निर्माता के साथ regex instantiating हो प्रतीत नहीं होता है। जैसे new RegExp('ABC','g');
... फिर भी, शाब्दिक (सैद्धांतिक रूप से) काम करना चाहिए, है ना?
मेरा अनुमान भी अजीब है कि ... फिर भी ... – James
@ जेपी: यह वास्तव में अजीब नहीं है, आपने कभी भी 'नया' कीवर्ड का उपयोग नहीं किया है। – Chris
अजीब बात यह है कि यदि आप फ़ंक्शन में एक ही कोड को कई बार कॉल करते हैं, तो यह सही आउटपुट वापस कर देगा। ऐसा लगता है कि यह उसी कार्य के बाद की कॉल में कुछ असाइनमेंट को गलत तरीके से अनुकूलित करता है। –