Aquí se hizo una pregunta similar, pero la entrada y el patrón son diferentes.
El objetivo es convertir una cadena con una lista numerada en fragmentos que contengan el contenido sin los números.
Aporte:
var string = "3. line A<br>4. line B<br>5. line C<br>6. line3. garbage<br>7. line<br>8. line END";
expresión regular:
var arr = string.split(/(^\d+\.)|(<br>\d+\.)/).filter(x => x);
Rendimiento esperado:
array["line A", "line B", "line C", "line3. garbage", "line", "line END"]
Pero la salida en Javascript es en cambio:
0: "3." 1: " line A" 2: "<br>4." 3: " line B" 4: "<br>5." 5: " line C" 6: "<br>6." 7: " line3. garbage" 8: "<br>7." 9: " line" 10: "<br>8." 11: " line END"
¿Por qué se incluye el patrón en los resultados? En PHP se excluye el patrón, lo esperado, pero no en Javascript.
¿Cómo eliminar el patrón del resultado final?
Si está buscando una solución de expresión regular pura, sugeriría esta expresión regular para .match
:
/(?<=\s|^)[az][\w.-]*(?:\s+[\w.-]+)*/gmi
var string = "3. line A<br>4. line B<br>5. line C<br>6. line3. garbage<br>7. line<br>8. line END"; var m = string.match(/(?<=\s|^)[az][\w.-]*(?:\s+[\w.-]+)*/gmi); console.log(m);
Explicación:
(?<=\s|^)
: Afirma que el carácter anterior es un espacio en blanco o un comienzo de línea[az]
: Coincidir con una letra (ignorar mayúsculas y minúsculas)[\w.-]*
: Coincide con 0 o más caracteres de palabra o punto o guión(?:\s+[\w.-]+)*
: Coincide con 0 o más palabras separadas por 1+ espacios en blanco