2010-10-16 18 views
30

की तुलना में जावास्क्रिप्ट रेगेक्स, जब मैं regexp की बात करता हूं तो मैं सिर्फ एक नोब हूं। मुझे पता है कि पर्ल regexp के साथ अद्भुत है और मुझे बहुत पर्ल नहीं पता है। हाल ही में जावास्क्रिप्ट सीखना शुरू कर दिया और उपयोगकर्ता इनपुट को मान्य करने के लिए के लिए regex में आया ... उन्हें बहुत अधिक उपयोग नहीं किया है।पर्ल रेगेक्स

जावास्क्रिप्ट regexp Perl regexp के साथ तुलना कैसे करता है? समानताएं और भेद?
क्या जेएस में लिखे गए सभी regexp को पर्ल में उपयोग किया जा सकता है और इसके विपरीत?
इसी तरह के वाक्यविन्यास?

+1

मुझे यह देखने के लिए उत्सुकता है कि कोई इसका उत्तर देता है या नहीं। मुझे पता है कि मूल रेगेक्स सुविधा पर्ल और जावास्क्रिप्ट के बीच समान है (^ एंकर बाएं, $ एंकर सही, शब्द सीमा के लिए \ b) आदि। यद्यपि गैर-लालची मिलान और पीछे संदर्भों की तरह, कुछ उन्नत सुविधा भिन्न हो सकती है। – jpsimons

उत्तर

22

ईसीएमएस्क्रिप्ट 2018 के बाद, जावास्क्रिप्ट की कई रेगिक्स की कमी तय की गई है।

अभी भी क्या याद आ रही है:

  • जावास्क्रिप्ट अंतिम मैचों बनाकर उलटे पांव लौटने से रोकने के लिए एक रास्ता नहीं है (अधिकार परिमाणकों ++/*+/?+ या परमाणु समूहों (?>...) का उपयोग)।
  • रिकर्सिव/संतुलित उपसमूह मिलान समर्थित नहीं है।
  • एक अन्य (कॉस्मेटिक) बात यह है कि जावास्क्रिप्ट वर्बोज रेगेक्स को नहीं जानता है, जो उन्हें पढ़ने के लिए कठिन बना सकता है।

इसके अलावा, मूल रेगेक्स वाक्यविन्यास दोनों स्वादों में बहुत समान है।

+3

स्ट्रिंग concatenation के साथ आप नकली verbose regexs कर सकते हैं। यह सच वर्बोज रेगेक्स के रूप में उतना अच्छा नहीं है, इसलिए जब आप इसे करेंगे तो अवरोध अधिक होगा, लेकिन यह अभी भी एक विकल्प है और कुछ स्थितियों में निश्चित रूप से सार्थक है। –

+0

ईसीएमएस्क्रिप्ट 2018 में दावाों को देखा गया है। – Jakob

6

यह comparison आपके सभी प्रश्नों का उत्तर देगा।

+4

इसके अलावा यह लगभग तीन साल पुराना है, क्योंकि इसमें केवल पर्ल 5.8 शामिल है, और उस सूची में से कई चीजें 5.10 में जोड़ दी गई थीं। – hobbs

+1

@ हॉब्स - हम में से कुछ अभी भी 5.8 दुनिया में रहते हैं :) – DVK

+5

विशिष्ट होने के लिए (यानी, वास्तव में सहायक), 5.10 नामित कैप्चर, बैकरेन्फर नाम, और '+' का उपयोग करके "स्वामित्व वाले क्वांटिफायर" जोड़ता है, साथ ही कुछ बैकट्रैकिंग नियंत्रण और रिकर्सिव-डेसेंट पार्सिंग से संबंधित अन्य सामान जो उस तुलना में नहीं हैं। – hobbs

5

एक और अंतर: जावास्क्रिप्ट में, s संशोधक नहीं है: डॉट "।" एक न्यूलाइन चरित्र से कभी मेल नहीं खाएगा। "।" के प्रतिस्थापन के रूप में, वर्ण वर्ग [\s\S] जावास्क्रिप्ट में उपयोग किया जा सकता है, जो पर्ल में /./s जैसा काम करेगा।

+1

या चरित्र वर्ग '[^] ' – irisjay

+1

का उपयोग करें' एस 'संशोधक ईसीएमएस्क्रिप्ट 2018 में जोड़ा गया है। – Jakob

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