2012-01-24 13 views
6

कृपया जावास्क्रिप्ट कोड को अपनाने पर विचार regexp का एक हिस्सा की जगह:केवल मिलान

"myObject.myMethod();".replace(/\.\w+\(/g, "xxx"); 

यह देता है "myObjectxxx);" के रूप में ".myMethod(" चयनित है।

अब मैं केवल myMethod का चयन करूंगा। दूसरे शब्दों में, मैं . से शुरू होने वाले किसी भी शब्द का चयन करना चाहता हूं और ( (बहिष्कृत) के साथ समाप्त करना चाहता हूं।

धन्यवाद, लुका।

उत्तर

18

जनरल जवाब:, बात यह है कि आप कोष्ठकों के साथ रखना चाहते हैं कैप्चर करें और शामिल यह प्रतिस्थापन स्ट्रिंग में $1 के रूप में है।

विवरण के लिए कोई regexp प्रतिस्थापन ट्यूटोरियल देखें।

यहां: बस अपनी प्रतिस्थापन स्ट्रिंग में . और ( शामिल करें।

एक अभ्यास के लिए, एक regexp कि ABC और DEF के मनमाने ढंग से पत्र-मूल्यों के लिए --DEF--ABC-- को योजना --ABC--DEF-- के किसी भी स्ट्रिंग हो जाएगा लिखें। तो --XY--IJK----IJK--XY-- में बदलना चाहिए। यहां आपको वास्तव में कैप्चर समूह और बैक संदर्भों का उपयोग करने की आवश्यकता है।

"myObject.myMethod();".replace(/^([^\.]*\.)\w+(\(.*)$/g, "$1xxx$2"); 

सरल समाधान का सुझाव दिया गया है, हालांकि:

+0

ग्रेट धन्यवाद! आखिरकार मैंने उपयोग कोष्ठक और प्रतिस्थापन में $ समझ लिया है ... – lviggiani

3

आप lookaround कथनों का उपयोग कर सकते हैं:

.replace(/(?<=\.)\w+(?=\()/g, 'xxx') 

उन मैच है, जबकि एक ही समय में मैच का भाग न किया जा रहा है सफल होने के लिए अनुमति देगा। इस प्रकार आप केवल बीच में ही भाग बदल रहे हैं।

regexes के साथ अपरिचित लोगों के लिए आसान विकल्प शायद सिर्फ . और प्रतिस्थापन में ( शामिल करने के लिए और साथ ही:

.replace(/\.\w+\(/g, ".xxx(") 
+2

'\ 1' का उपयोग न करने के लिए एक कामकाज की तरह, है ना? मेरा मतलब है, बहुत से लोग लुकहेड के बारे में नहीं जानते हैं और देखो, लेकिन अक्सर वे एक उच्च लागत से जुड़े होते हैं। विशेष रूप से, जब वे शुरुआत में होते हैं या स्ट्रिंग के एंडो को वैसे भी बदला जा सकता है। –

+0

शायद। हालांकि, रखने के लिए दो टुकड़े हैं, इसलिए आपको अनिवार्य रूप से '-replace' (\।) \ W + (\() ',' $ 1xxx $ 2 '' (क्षमा करें, PowerShell पर वापस आना) की आवश्यकता है। मुझे संदेह है कि यह और भी है '-replace 'से पढ़ने योग्य \। \ w + \ (', '.xxx ('' किसी भी मामले में, लुकराउंड अधिक महंगा नहीं होगा (यदि बिल्कुल), और लोगों को नई अवधारणाओं को पढ़ाना शायद ही गलत माना जा सकता है। – Joey

+0

हाँ, मुझे याद आया कि तार भी तारों को तय कर रहे हैं। फिर उन्हें तुरंत शामिल करना आसान है। फिर भी, उन्हें कैप्चर समूहों के उपयोग के बारे में जानना चाहिए, उदाहरण के लिए दो मानों को स्वैप करना। –

1

मैं एक अलग दृष्टिकोण सुझाव देना चाहेंगे।

+0

ठीक है, यही वह सुझाव है जिसे मैंने सुझाव दिया था। कैप्चर समूह regexps की एक प्रमुख विशेषता है, सभी को पता होना चाहिए। –

+0

@ एनी-मूस: सहमत, लेकिन मैं थोड़ा उलझन में हूँ आपके उत्तर में \ 1'। आईआईआरसी, यह केवल रेगेक्स के भीतर एक समूह को संदर्भित करने का तरीका है, न कि प्रतिस्थापन स्ट्रिंग, जिसे '$ 1' की आवश्यकता है।अगर मैं इसके बारे में गलत हूं तो कृपया मुझे सही करें। –

+0

यह नियमित अभिव्यक्तियों की आपकी बोली पर निर्भर करता है। मुझे लगता है कि जेएस केवल '$ 1' का उपयोग करता है। पर्ल दोनों करता है, और sed '\ 1' आईआईआरसी का उपयोग करता है। –

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