2010-05-03 9 views
5

मैं जावास्क्रिप्ट में शौकिया हूं। I saw this other (now deleted) question, और यह मुझे आश्चर्यचकित कर दिया। क्या आप मुझे बता सकते हैं कि नीचे नियमित अभिव्यक्ति का क्या अर्थ है?नियमित अभिव्यक्ति | (? = W =>) का क्या अर्थ है?

split(/\|(?=\w=>)/) 

क्या यह | के साथ स्ट्रिंग को विभाजित करता है?

उत्तर

4

यह | पर स्ट्रिंग विभाजन लेकिन केवल [a-zA-Z0-9_] में एक चार और के द्वारा अपने पीछा करता है, तो =>

उदाहरण:

यह |

पर a|b=> बंट जाएगा यह पर a|b विभाजित नहीं होगा |

7

नियमित अभिव्यक्ति स्लैश में निहित है। इसका मतलब है कि नियमित रूप से अभिव्यक्ति की

\|  # A pipe symbol. It needs to be scaped with a backslash 
      # because otherwise it means "OR" 
(?=  # a so-called lookahead group. It checks if its contents match 
      # at the current position without actually advancing in the string 
    \w=> # a word character (a-z, A-Z, 0-9, _) followed by => 
)   # end of lookahead group. 
1

ब्रेकडाउन: स्ट्रिंग में

  • / नियमित अभिव्यक्ति शाब्दिक शुरू सीमांकक
  • \| मैच |, |, regex में विशेष वर्ण है, इसलिए \ प्रयोग किया जाता है इसे बचने के लिए
  • (?= एक लुकहेड अभिव्यक्ति है, यह देखने के लिए जांच करता है कि क्या एक स्ट्रिंग =>
  • )/ द्वारा पीछा किया, मिलान यह
  • \w=> मैचों (_ सहित) किसी भी अल्फ़ान्यूमेरिक स्ट्रिंग के बिना अभिव्यक्ति इस प्रकार अग्रदर्शी अभिव्यक्ति के अंत और regex

संक्षेप में की समाप्ति का सूचक, स्ट्रिंग को | पर विभाजित किया जाएगा यदि उसके बाद कोई अल्फान्यूमेरिक कैरेक्टर या अंडरस्कोर और फिर => है।

0

इस मामले में, पाइप चरित्र बच निकला है इसलिए इसे शाब्दिक पाइप के रूप में माना जाता है। विभाजन पाइप पर होता है जिसके बाद किसी भी अल्फान्यूमेरिक और '=>' होते हैं।

'|' नियमित अभिव्यक्तियों में एक प्रकार के ऑपरेटर के रूप में भी प्रयोग किया जाता है। उदाहरण के लिए:

split(/k|i|tt|y/) 

या तो 'के', 'मैं', एक 'टीटी' या 'वाई' चरित्र पर विभाजित होगा।

0

ट्रिमिंग परिसीमन पात्रों पर हम पाते हैं \|(?=\w=>)

  • |, regex में विशेष वर्ण है, इसलिए यह रूप में \|
  • (?=REGEX) एक बैकस्लैश के साथ भाग जाना चाहिए सकारात्मक आगे देखने के लिए वाक्य रचना है: केवल तभी से मेल खाता है REGEX मैचों, लेकिन REGEX से मेल खाने वाले सबस्ट्रिंग का उपभोग नहीं करता है। REGEX का मिलान मिलान किए गए परिणाम का हिस्सा नहीं बनता है। अगर यह केवल \|\w=> था, तो पैर स्ट्रिंग को के बजाय | के बजाय विभाजित किया जाएगा।

इस प्रकार /\|(?=\w=>)/ मैचों में केवल वे | अक्षर हैं जो \w=> द्वारा पीछा कर रहे हैं। यह मेल खाता है |a=> नहीं बल्कि |a>, || आदि

पर विचार जुड़ा हुआ सवाल से उदाहरण स्ट्रिंग: a=>aa|b=>b||b|c=>cc। यदि यह लुकहेड के लिए नहीं था, तो विभाजन [a=>aa, b||b, cc] की सरणी उत्पन्न करेगा। लुकहेड के साथ, आपको [a=>aa, b=>b||b, c=>cc] मिलेगा, जो वांछित आउटपुट है।

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