test regulares regular probar palabra numeros expresiones expresion example exacta espacio ejemplos blanco alfanumerico javascript regex arrays url url-routing

javascript - regulares - RegEx para unir cosas entre paréntesis



javascript regex test (4)

Estoy teniendo un momento difícil para hacer que esto funcione. Tengo una cadena como:

something/([0-9])/([a-z])

Y necesito regex o un método para obtener cada coincidencia entre paréntesis y devolver una matriz de coincidencias como:

[ [0-9], [a-z] ]

La expresión regular que uso es / //((.+)/)/ (( //((.+)/)/ que parece coincidir con lo correcto si solo hay un conjunto de paréntesis.

¿Cómo puedo obtener una matriz como la anterior usando cualquier método RegExp en JavaScript? Necesito devolver solo esa matriz porque los elementos devueltos en la matriz se enlazarán para crear un esquema de enrutamiento de URL.


Necesitas hacer que tu patrón de expresiones regex no sea codicioso agregando un ''?'' después del ''. +''

Por defecto, ''*'' y ''+'' son codiciosos ya que coincidirán con una cadena de caracteres lo más larga posible, ignorando cualquier coincidencia que pueda ocurrir dentro de la cadena.

No codicioso hace que el patrón solo coincida con la coincidencia más corta posible.

¡Mire Watch Out for The Greediness! para una mejor explicación

O alternativamente, cambie su expresión regular a

/(([^/)]+)/)

que coincidirá con cualquier agrupación de parens que, por sí mismas, no contengan parens.


Si s es tu cadena:

s.replace(/^[^(]*/(/, "") // trim everything before first parenthesis .replace(//)[^(]*$/, "") // trim everything after last parenthesis .split(//)[^(]*/(/); // split between parenthesis


Usa esta expresión:

//(([^()]+)/)/g

p.ej:

function() { var mts = "something/([0-9])/([a-z])".match(//(([^()]+)/)/g ); alert(mts[0]); alert(mts[1]); }


var getMatchingGroups = function(s) { var r=//((.*?)/)/g, a=[], m; while (m = r.exec(s)) { a.push(m[1]); } return a; }; getMatchingGroups("something/([0-9])/([a-z])"); // => ["[0-9]", "[a-z]"]