2010-02-19 18 views
7

He la siguiente función de reemplazarJavaScript regex replace - pero solo parte de una cadena combinada?

myString.replace(/\s\w(?=\s)/,"$1\xA0"); 

El objetivo es tomar las palabras de una sola letra (por ejemplo, las preposiciones) y agregar un espacio de no separación después de ellos, en lugar de espacio estándar.

Sin embargo, la variable anterior de $ 1 no funciona para mí. Inserta texto "$ 1" en lugar de una parte de la cadena coincidente original + nbsp.

¿Cuál es la razón del comportamiento observado? ¿Hay alguna otra forma de lograrlo?

Respuesta

9

$ 1 no funciona porque no tiene ningún subgrupo de captura.

La expresión regular debería ser algo así como /\b(\w+)\s+/.

+0

sí, ese "grupo de captura" era la pieza que me faltaba. ¡Muchas gracias! –

+0

Gracias. No está bien documentado y no pude entenderlo –

5

Parece que quiere hacer algo como esto:

myString.replace(/\s(\w)\s/,"$1\xA0"); 

pero de esa manera se va a perder el espacio en blanco antes de que su palabra de una sola letra. Por lo tanto, probablemente también desee incluir el primer \s en el grupo de captura.

+0

¡eh, esto funciona como el encanto! Grandioso, muchas gracias. No sabía sobre "capturar grupo" pero sospechaba que había algo así. –

Cuestiones relacionadas