2011-07-28 20 views
17

Estoy tratando esto:¿Cómo puedo poner [] (corchetes) en RegExp javascript?

str = "bla [bla]"; 
str = str.replace(/\\[\\]/g,""); 
console.log(str); 

Y el reemplazo no trabaja, ¿qué estoy haciendo mal?

ACTUALIZACIÓN: Estoy tratando de quitar cualquier corchetes en la cadena, lo raro es que si hago

replace(/\[/g, '') 
replace(/\]/g, '') 

funciona, pero
replace(/\[\]/g, '');
no lo hace.

Respuesta

38

Debería ser:

str = str.replace(/\[.*?\]/g,""); 

No es necesario barras invertidas dobles (\), porque no es una cadena sino una declaración de expresiones regulares, si se construye la expresión regular de una cadena que hace necesidad la doble barra invertida;).

También interpretaba literalmente el 1 (que no coincidía). El uso de .* indica cualquier valor entre los corchetes.

La nueva versión de cadena acumulación RegExp sería:

str=str.replace(new RegExp("\\[.*?\\]","g"),""); 

ACTUALIZACIÓN: Para eliminar corchetes solamente:

str = str.replace(/\[(.*?)\]/g,"$1"); 

Su código de seguridad no está funcionando, porque está tratando de igualar "[]" (secuencialmente sin nada permitido entre). Podemos solucionar esto mediante la agrupación de grupos no codiciosos ((.*?)) lo que hay entre los corchetes, y utilizando una retro-referencia ($1) para el reemplazo.

Actualización 2: Para eliminar múltiples corchetes

str = str.replace(/\[+(.*?)\]+/g,"$1"); 
// bla [bla] [[blaa]] -> bla bla blaa 
// bla [bla] [[[blaa] -> bla bla blaa 

Nota esto no se corresponde con las cantidades de apertura/cierre, simplemente elimina toda secuencial se abre y se cierra. Además, si los corchetes secuenciales tienen separadores (espacios, etc.) no coincidirán.

+0

gracias, pero solo estoy tratando de eliminar los corchetes, no lo que hay dentro de ellos – ilyo

+6

Su solución no eliminará todos los corchetes debido a ese codicioso ". *" Allí. No lo necesita de todos modos, simplemente 'str.replace (/ [\ [\]]/g, '')' – Pointy

+0

@Rudu esto funciona si tengo un solo paréntesis de apertura y cierre, ¿y si tengo '[[ ['? – ilyo

0

dos barras invertidas produce una sola barra invertida, por lo que están buscando "una barra invertida, seguida de una clase de caracteres que consiste en una 1 o una right bracket, y luego que se está perdiendo un paréntesis de cierre.

Trate

str.replace(/\[1\]/g, ''); 
1

tienes que escapar del soporte, como \[ y \]. Confirmar http://regexpal.com/. es bastante útil :)

para reemplazar todos los soportes en una cadena , esto debería hacer el trabajo:

str.replace(/\[|\]/g,''); 

Espero que esto ayude.
Hristo

0

¿Qué exactamente intentas hacer coincidir?

Si no escapa de los corchetes, se consideran clases de caracteres. Esto:

/[1\\]/ 

Coincide con un 1 o una barra diagonal inversa. Es posible que desee escapar de ellos con una sola barra invertida:

/\[1\]/ 

Pero esto no corresponde a ninguno, ya que no tiene un [1] en su cadena.

Cuestiones relacionadas