2009-09-29 30 views
21

necesito devolver sólo el texto que figura entre corchetes en una cadena. Tengo la siguiente expresión regular, pero esto también devuelve los corchetes:Javascript - cadena de retorno entre corchetes

var matched = mystring.match("\\[.*]"); 

Una cadena referida solamente contener un conjunto de corchetes, por ejemplo:

Some text with [some important info] 

QUIERO adaptado a contener 'algunas importantes información ', en lugar de la' [información importante] 'que recibo actualmente.

Respuesta

58

Uso agrupación. He agregado un ? para hacer que la coincidencia sea "poco sangrienta", ya que esto es probablemente lo que quieres.

var matches = mystring.match(/\[(.*?)\]/); 

if (matches) { 
    var submatch = matches[1]; 
} 
2

¿Usted intentó parens captura:

("\\[(.*)]"); 

Esto debería devolver el patrón dentro de los corchetes como un partido capturado en la matriz devuelta

0

No se puede. Javascript no es compatible con lookbehinds.

Vas a tener que utilizar un grupo de captura o recortar los soportes.

Por cierto, es probable que no quiere un codicioso .* en su expresión regular. Prueba esto:

"\\[.*?]" 

O mejor, esto:

"\\[[^\\]]*]" 
9

Como javascript no admite capturas, tiene que hackearlas. Considere esta alternativa que toma el enfoque opuesto. En lugar de capturar lo que está dentro de los corchetes, elimine lo que está fuera de ellos. Como solo habrá un par de corchetes, debería funcionar bien. Usualmente uso esta técnica para quitar espacios en blanco iniciales y finales.

mystring.replace(/(^.*\[|\].*$)/g, ''); 
+0

Está agregando el) al final si hay una nueva línea después de él. –

Cuestiones relacionadas