2012-06-13 10 views
8

Duplicar posibles:
Regular Expression to find a string included between two characters, while EXCLUDING the delimitersexpresiones regulares para obtener el texto del interior de los corchetes

tengo una función en la que tengo que conseguir el texto que está encerrado entre corchetes, pero no los soportes de ejemplo

this is [test] line i [want] text [inside] square [brackets] 

de la línea anterior quiero palabras

prueba

quieren

dentro

soportes

que estoy tratando con hacer esto con /\[(.*?)\]/g pero no estoy recibiendo resultado satisfecho me sale el interior de las palabras entre paréntesis, sino también los soportes que son no es lo que quiero

busqué un tipo similar de pregunta en SO, pero ninguna de esas soluciones funciona correctamente para Aquí hay uno que encontró (?<=\[)[^]]+(?=\]) esto funciona en RegEx coach pero no con javascript. Aquí es refrence desde donde me dieron esta

Esto es lo que he hecho hasta ahora demo

favor ayuda

+0

su duplicado no exacto corchete en un carácter no normal que tiene que ser tratado de manera diferente a continuación, otros personajes – sohaan

Respuesta

22

Una sola búsqueda hacia delante debe hacer el truco aquí:

a = "this is [test] line i [want] text [inside] square [brackets]" 
words = a.match(/[^[\]]+(?=])/g) 

pero en un caso general, exec o replace bucles basados ​​en llevar a código más simple:

words = [] 
a.replace(/\[(.+?)\]/g, function($0, $1) { words.push($1) }) 
+0

¿No podría simplificarse la actualización de expresiones regulares?/[^ \ [\]] + (? = \])/g – Jules

+0

@Jules: buena sugerencia, gracias. – georg

5

This fiddle utiliza RegExp.exec y salidas sólo lo que hay dentro del paréntesis.

var data = "this is [test] line i [want] text [inside] square [brackets]" 
var re= /\[(.*?)\]/g; 
for(m = re.exec(data); m; m = re.exec(data)){ 
    alert(m[1]) 
} 
+0

Señor, ¿me puede explicar lo que está sucediendo en bucle for y podemos use la función _each() de underscore.js para iterar – sohaan

Cuestiones relacionadas