Javascript y RegEx: dividir y mantener delimitador

Tengo una expresión regular que dividirá mi cadena en matrices.

Todo funciona bien, excepto que me gustaría mantener una parte del delimitador.

Aquí está mi expresión regular:

(&#?[a-zA-Z0-9]+;)[\s] 

En Javascript, estoy haciendo:

 var test = paragraph.split(/(&#?[a-zA-Z0-9]+;)[\s]/g); 

Mi párrafo es el siguiente:

 Current addresses: † Biopharmaceutical Research and Development
‡ Clovis Oncology
§ Pisces Molecular
|| School of Biological Sciences ¶ Department of Chemistry

El problema es que estoy obteniendo 10 elementos en mi matriz y no 5 como debería. De hecho, también estoy obteniendo mi delimitador como un elemento y mi objective es mantener el delimitador con el elemento dividido y no crear uno nuevo.

Muchas gracias por su ayuda.

EDITAR:

Me gustaría obtener esto como resultado:

 1. † Biopharmaceutical Research and Development
2. ‡ Clovis Oncology
3. § § Pisces Molecular
|| School of Biological Sciences 4. ¶ Department of Chemistry

Trate de usar el match lugar:

 var test = paragraph.match(/&#?[a-zA-Z0-9]+;\s[^&]*/g); 

Actualizado: Se agregó una coincidencia requerida de espacios en blanco.

Explicación:

  • &#? Match & y un # opcional (el signo de interrogación coincide con una o cero veces)

  • [a-zA-Z0-9] es un rango de todos los caracteres y dígitos en mayúsculas y minúsculas. Si también acepta un guión bajo, podría reemplazarlo con \w .

  • El signo + significa que debe coincidir con el último patrón una o más veces, de modo que coincida con uno o más caracteres az, AZ y dígitos 0-9.

  • El ; coincide con el personaje ; .

  • El \s coincide con el espacio en blanco de la clase. Eso incluye espacio, tabulador y otros caracteres de espacio en blanco.

  • [^&]* Una vez más, un rango, pero dado que ^ es el primer carácter en el que se anula la coincidencia, por lo que, en lugar de hacer coincidir los caracteres & , coincide con todo excepto el & . La estrella coincide con el patrón cero o más veces.

  • g al final, después del último / significa global , y hace que la match continúe después de la primera coincidencia y obtenga una matriz de todas las coincidencias.

Entonces, haga coincidir & y un # opcional, seguido de cualquier número de letras o dígitos (pero al menos uno), seguido de ; , seguido de un espacio en blanco, seguido de cero o más caracteres que no sean & .

Como dije en el comentario, esta solución (no probada, por cierto) solo funcionará si solo estás administrando elementos
. Aquí:

 var text = paragraph.split("
"); // now text contains just the text on each line for(var i = 0; i elements on each line }

El text variable ahora es una matriz, donde cada elemento de la matriz es una línea del párrafo original. Los saltos de línea (
) se han agregado al final de cada línea. Acabas de mencionar que quieres dividirte en los caracteres especiales, pero por lo que veo, cada línea termina en un salto de línea, así que espero que esto tenga el mismo efecto. Desafortunadamente, no tengo tiempo para escribir una respuesta más completa en este momento.

Usando regex es bastante simple:

 var result = input.match(/&#?[^\W_]+;\s[^&]*/g); 

Pruébalo aquí .

Intereting Posts