Estoy aprendiendo algunas expresiones regulares.
Ahora estoy tratando de sacar la calle y el número de la casa de una cadena.
Así que esta es mi cadena "Driesstraat(Ide) 20". Driesstraat es el nombre de la calle. (Ide) es un acrónimo de municipio. 20 es el número de casa.
let re = /^(\d*[\p{L} \d'\/\\\-\.]+)[,\s]+(\d+)\s*([\p{L} \d\-\/'"\(\)]*)$/iu let match = adresInput.value.match(re) if (match){ match.shift(); console.log(match.join('|')); }El código anterior funciona cuando no hay (Ide). Obtuve esta cadena de un lector de Eid belga.
gracias de antemano
Lo primero es lo primero, (...) no coincide con su patrón (\d*[\p{L} \d'\/\\\-\.]+) , por lo que debe agregar (?:\(\p{L}*\))? o (?:\([^()]*\))? justo después de ese patrón para hacer coincidir opcionalmente una parte de una cadena entre paréntesis. (?:\(\p{L}*\))? coincidirá solo con letras entre corchetes y (?:\([^()]*\))? coincidirá con cualquier carácter que no sea ( y ) entre corchetes.
Además, cuando use expresiones regulares con el indicador /u , debe asegurarse de escapar solo lo que debe escaparse dentro de las clases de caracteres. Significa que escapaste varios caracteres dentro [...] . No necesita escapar ( , ) , . e incluso puede evitar escapar - cuando se coloca al final de la clase de personaje. Los caracteres que se deben escapar dentro de las clases de caracteres en el tipo de expresiones regulares de ECMAScript son \ , ] y ^ se debe escapar si está al comienzo de la clase de caracteres. Aunque el - también se puede escapar, es una buena práctica ponerlo al final de la clase de caracteres sin escapar.
Entonces, puedes usar
/^(\d*[\p{L} \d'/\\.-]+)(?:\([^()]*\))?[,\s]+(\d+)\s*([\p{L} \d/'"()-]*)$/uVea la demostración de expresiones regulares .
Tenga en cuenta que ni siquiera tiene que escapar / dentro de las clases de caracteres en el sabor de expresiones regulares de ECMAScript en JavaScript.
Ver una prueba de JavaScript:
let re = /^(\d*[\p{L} \d'/\\.\-]+)(?:\([^()]*\))?[,\s]+(\d+)\s*([\p{L} \d/'"()-]*)$/u; console.log(re.test("Driesstraat(Ide) 20"));