2010-03-02 26 views
10

मुझे इसे गुगल करने में परेशानी हो रही है। कुछ कोड में मैं देख रहा हूँजावास्क्रिप्ट में/[ []/क्या करता है?

name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 

/[\[]/ 1 पैरामीटर होने के लिए लग रहा है। प्रतीक क्या करते हैं? ऐसा लगता है कि यह \[\] के साथ [] को बदल रहा है लेकिन विशेष रूप से /[\[]/ क्या करता है?

+2

असली सवाल यह है कि क्यों वे एक ही '[' – friedo

+0

@friedo मुझे लगता है कि वे नहीं जानते कि क्या मिलान करने के लिए '[एक चरित्र वर्ग का उपयोग कर रहे ... ] 'चरित्र वर्ग –

उत्तर

11

वाक्यविन्यास /…/literal regular expression syntax है। और नियमित अभिव्यक्ति [\[] एक वर्ण वर्ग ([…]) का वर्णन करती है जो केवल है)। तो /[\[]/ एक नियमित अभिव्यक्ति है जो एक [ का वर्णन करती है।

लेकिन चूंकि वैश्विक ध्वज सेट नहीं है (ताकि केवल पहला मैच बदल दिया जाएगा), पूरी बात यह (शायद पढ़ने में आसान) के साथ प्रतिस्थापित किया जा सकता:

name.replace("[", "\\[").replace("]","\\]") 

लेकिन सभी मैचों अगर चाहिए प्रतिस्थापित किया, मैं शायद इस का प्रयोग करेंगे:

name.replace(/([[\]])/g, "\\$1") 
10

यह एक नियमित अभिव्यक्ति है जो बाएं स्क्वायर ब्रैकेट चरित्र से मेल खाती है।

यह करने का यह एक अजीब तरीका है;

var s2 = s1.replace(/\[/g, '\\[').replace(/]/g, '\\]'); 

मुझे लगता है कि: कोड की तरह एक स्ट्रिंग है, जो आप भी इस तरह कर सकता है में वर्ग कोष्ठक से पहले बैकस्लैश डाल करने के लिए कोशिश कर रहा है समग्र यह लग रहा है।

3

/[[]/एक वर्ण श्रेणी परिभाषित किया गया जिसमें केवल ']' वर्ण शामिल है (बच निकला), आप सही हैं [] के साथ []।

+0

एचआरएम है ... [और] उनके बच निकले संस्करण के साथ बदलता है एस –

2

[] रेगेक्स में स्वयं मिलान करने वाले पात्रों के संग्रह को दर्शाने के लिए उपयोग किया जाता है। यदि आप रेगेक्स में वास्तविक [ या ] का प्रतिनिधित्व करना चाहते हैं, तो आपको इसे \ से बचाना होगा, इसलिए [\[] और [\]]। रेगेक्स पैटर्न को इंगित करने के लिए अग्रणी और पीछे / मानक जेएस वाक्यविन्यास का हिस्सा हैं।

आखिरकार, यह [\[ द्वारा प्रतिस्थापित करता है और फिर ]\] द्वारा प्रतिस्थापित करता है।

+0

मुझे लगता है [] ए [मेटा चार नहीं है। [[] एक वैध चार वर्ग है जो केवल मेल खाता है [ – codaddict

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