आज मैं एक बहुत ही अजीब जावास्क्रिप्ट नियमित अभिव्यक्ति मुद्दे पर आया था। वैश्विक संशोधक (// g) का उपयोग करते समय, RegExp.test() बाद की कॉल में अलग-अलग मान उत्पन्न करता है। क्या कोई समझा सकता है क्यों?जावास्क्रिप्ट के RegExp कॉल के बीच स्थिति क्यों बनाए रखता है?
var s = "youtube.com/watch?v=XyeebVA3DNk";
var re1 = /^youtube\.com\/watch[a-zA-Z0-9_\-\?\&\=\/]+/g;
console.log(re1.test(s)); // true
console.log(re1.test(s)); // false
console.log(re1.test(s)); // true
console.log(re1.test(s)); // false
console.log(re1.test(s)); // true
console.log(re1.test(s)); // false
console.log(re1.test(s)); // true
var re2 = /^youtube\.com\/watch[a-zA-Z0-9_\-\?\&\=\/]+/;
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
मैं क्रोम 8 और फ़ायरफ़ॉक्स 3.6 में इसे पुन: उत्पन्न करने में सक्षम हूं।