2011-10-05 18 views
6
> var p = /abc/gi; 
> var s = "abc"; 
> p.test(s); 
    true 
> p.test(s); 
    false; 

जब मैं क्रोम के कंसोल पर यह कोड चलाता हूं तो मेरे पास यह आउटपुट ऊपर है। प्रत्येक बार जब मैं '.test()' कहता हूं तो मुझे एक अलग मूल्य मिलता है। कोई मुझे समझा सकता है कि ऐसा क्यों होता है? धन्यवादजावास्क्रिप्ट रेगेक्स .test()

+1

http://stackoverflow.com/questions/7331753/strange-behavior-of-javascript-regex-test-function –

+0

अधिक ड्यूप्स: [दिलचस्प परीक्षण

इसके अलावा, इस सवाल पर एक नज़र जावास्क्रिप्ट RegExp] (http://stackoverflow.com/q/604860) और [नियमित अभिव्यक्ति परीक्षण सत्य और गलत के बीच तय नहीं कर सकता] (http://stackoverflow.com/questions/2669861/regular-expression-test- खिचड़ी भाषा-तय-बीच-सच और झूठी जावास्क्रिप्ट) –

उत्तर

5

g झंडा RegExp शाब्दिक कारण बनता है:

> var p = /a/gi; 
> var s = "aaa"; 
> p.test(s) 
true 
> p.test(s) 
true 
> p.test(s) 
true 
> p.test(s) 
false 

समान प्रश्न देखें आप LastIndex

मैचों को ट्रैक करने के लिए उपयोग कर रहे हैं;

print(p.test(s), p.lastIndex) 
print(p.test(s), p.lastIndex) 

आप

true,3 
false,0 

देखना होगा तो 2 परीक्षण में विफल रहता है के रूप में वहाँ 1 से कोई वृद्धिशील मुकाबला नहीं है।

2

यह/जी ध्वज की वजह से है। पिछली खोज में मेल खाने वाले चरित्र से प्रत्येक लगातार खोज शुरू होती है। आपके मामले में, दूसरे भाग में यह स्ट्रिंग के अंत से शुरू होता है और झूठी रिटर्न देता है। तीसरी बार यह शुरुआत से फिर से शुरू होता है। इत्यादि। Why RegExp with global flag in Javascript give wrong results?

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