2010-03-02 11 views
10

Non riesco a cercarlo su google. In un certo codice vedoChe cosa fa/[ []/do in JavaScript?

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

/[\[]/ sembra essere uno dei parametri. Cosa fanno i simboli? Sembra che stia sostituendo [] con \[\] ma cosa fa esattamente lo /[\[]/?

+2

La vera domanda è perché si sta utilizzando una classe di caratteri per indicare un singolo '[' – friedo

+0

@friedo Credo che non sanno quello che '[... ] 'è la classe di caratteri –

risposta

11

La sintassi /…/ è literal regular expression syntax. E l'espressione regolare [\[] descrive una classe di caratteri ([…]) che è il solo carattere che è [). Quindi /[\[]/ è un'espressione regolare che descrive un singolo [.

Ma dato che il flag globale non è impostato (in modo che solo la prima partita sarà sostituito), il tutto potrebbe essere sostituito con questo (probabilmente più facile da leggere):

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

Ma se tutte le partite devono essere sostituito, probabilmente uso questo:

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

È un'espressione regolare che corrisponde al carattere di parentesi quadra sinistra.

È un modo strano di farlo; nel complesso sembra che il codice sta cercando di mettere backslash prima parentesi quadre in una stringa, che si potrebbe anche fare in questo modo:

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

credo.

3

/[[]/definito un intervallo di caratteri che include solo il carattere ']' (escape), si è corretto che viene sostituito [] con [].

+0

hrm ... sostituisce [e] con la loro versione di escape s –

2

Il [] è in espressioni proprie utilizzato per indicare una raccolta di caratteri da abbinare. Se si desidera rappresentare l'attuale [ o ] in espressioni regolari, è necessario evaderlo tramite \, quindi [\[] e [\]]. Gli / iniziali e finali sono solo parte della sintassi JS standard per denotare un modello regex.

Dopo tutto, sostituisce [ per \[ e quindi sostituisce ] per \].

+0

Immagino che all'interno [] a [non sia un meta char. [[] è una classe char valida che corrisponde solo a [ – codaddict