नियमित अभिव्यक्तियों में 'जी' ध्वज का क्या अर्थ है?


110

gनियमित भावों में ध्वज का अर्थ क्या है ?

के बीच क्या अंतर है /.+/gऔर /.+/?

जवाबों:


130

gवैश्विक खोज के लिए है। मतलब यह सभी घटनाओं से मेल खाएगा। आप आमतौर पर यह भी देखेंगे iकि किस मामले की अनदेखी करें।

संदर्भ: वैश्विक - जावास्क्रिप्ट | MDN

"जी" ध्वज इंगित करता है कि एक स्ट्रिंग में सभी संभावित मैचों के खिलाफ नियमित अभिव्यक्ति का परीक्षण किया जाना चाहिए।

gध्वज के बिना , यह केवल पहली बार परीक्षण करेगा।


1
इसलिए / g ध्वज .test फ़ंक्शन का उपयोग करते समय अप्रासंगिक है, क्योंकि यह केवल वैसे भी पहला मैच पाता है, है ना?
xr280xr

10
@ xr280xr अप्रासंगिक नहीं है, प्रतिसंवाद की तरह है। यदि आप RegExp का फिर से उपयोग करते हैं तो यह चीजों को तोड़ देगा। var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
Janosch



10

g वैश्विक खोज ध्वज है।

वैश्विक खोज ध्वज, RegExp को स्ट्रिंग के दौरान एक पैटर्न के लिए खोज करता है, सभी घटनाओं की एक सरणी बनाता है जो दिए गए पैटर्न से मेल खा सकता है।

के बीच का अंतर तो /.+/gऔर /.+/ वह यह है कि gसंस्करण सिर्फ पहली के बजाय हर घटना मिल जाएगा।


9

इसमें कोई अंतर नहीं है /.+/gऔर /.+/क्योंकि वे दोनों केवल एक बार पूरे स्ट्रिंग से मेल खाएंगे। gयदि नियमित अभिव्यक्ति एक बार से अधिक मेल खाते हैं या समूहों, जिसमें मामले शामिल हैं सकता है एक फर्क नहीं पड़ता .match()मैचों की एक सरणी के बजाय समूहों की एक सरणी वापस आ जाएगी।


8

जैसा कि @matiska ने बताया, gझंडा lastIndexसंपत्ति को भी निर्धारित करता है ।

इसका एक बहुत महत्वपूर्ण दुष्प्रभाव यह है कि यदि आप मिलान स्ट्रिंग के खिलाफ उसी रेगेक्स उदाहरण का पुन: उपयोग कर रहे हैं, तो यह अंततः विफल हो जाएगा क्योंकि यह केवल खोज करना शुरू कर देता है lastIndex

// regular regex
const regex = /foo/;

// same regex with global flag
const regexG = /foo/g;

const str = " foo foo foo ";

const test = (r) => console.log(
    r,
    r.lastIndex,
    r.test(str),
    r.lastIndex
);

// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);

// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);


6

gध्वज के अर्थ के अनुसार , यह regexp.lastIndexसंपत्ति को प्रभावित करता है:

LastIndex नियमित अभिव्यक्ति उदाहरणों का एक पढ़ा / लिखा पूर्णांक गुण है जो उस सूचकांक को निर्दिष्ट करता है जिस पर अगला मैच शुरू होता है। (...) यह गुण केवल तभी सेट किया जाता है जब नियमित अभिव्यक्ति उदाहरण वैश्विक खोज को इंगित करने के लिए "g" ध्वज का उपयोग करता है।

संदर्भ: मोज़िला डेवलपर नेटवर्क


3

नियमित अभिव्यक्ति में जी एक वैश्विक खोज को परिभाषित करता है, जिसका अर्थ है कि यह सभी लाइनों पर सभी उदाहरणों के लिए खोज करेगा।


1

स्ट्रिंग के आधार पर उदाहरण देंगे। अगर हम एक स्ट्रिंग से सभी घटनाओं को दूर करना चाहते हैं। यदि हम "हेलो वर्ल्ड" से "ओ" की सभी घटनाओं को हटाना चाहते हैं

"hello world".replace(/o/g,'');

0
  1. g -> सभी मैच लौटाता है
  2. without g -> पहला मैच लौटाया

उदाहरण:

  1. '1 2 1 5 6 7'.match(/\d+/)लौटता है ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]। जैसा कि आप देख रहे हैं कि हम केवल पहला मैच ले सकते हैं "1"
  2. '1 2 1 5 6 7'.match(/\d+/g)सभी मैचों की एक सरणी देता है ["1", "2", "1", "5", "6", "7"]

1
कृपया समझाएं कि आगे - "सभी मैचों" और "पहले मैच" में क्या अंतर है?
निको हासे

मैंने और समझाया। आपके मार्गदर्शन के लिए धन्यवाद
नागीबाबा

क्या आप अपनी नकारात्मक दर को दूर कर सकते हैं? मैंने और अधिक व्याख्यात्मक होने की कोशिश की।
नागिब्बा

गलतफहमी के लिए क्षमा करें :)
नागिबाबा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.