2009-12-24 9 views
5

quiero reemplazar líneas vacías en mi cadena con un número de iteraciónuso de JavaScript RegExp para reemplazar cada partido con un número de iteración

por ejemplo, reemplazar

Cadena:

"My first line 

My second line 

My third line" 

con

" 
1 

My first line 

2 

My second line 

3 

My third line" 

puedo igualar y reemplazar estas líneas usando

var newstring = TestVar.replace (/(^|\n\n)/g, "\nhello\n"); 

Sin embargo estoy luchando para añadir una función que añadirá un número iterativo para cada uno.

¿Puede ayudarnos?

TIA,

Gids

+0

favor guión sus bloques de código con cuatro espacios al comienzo de cada línea. – Gumbo

+0

Gracias por el aviso, me aseguraré de hacerlo en el futuro – Gids

Respuesta

8

Sí, se puede hacer eso en javascript. Solo necesita pasar una función como segundo argumento al replace.

función
var i = 0; 
var newstring = TestVar.replace(/(^|\n\n)/g, function() { return '\n' + (++i) + '\n'; }); 

en realidad obtener una gran cantidad de parámetros en base a los cuales se puede decidir qué valor desea reemplazar con, pero no necesitamos cualquiera de ellos para esta tarea.

Sin embargo, es bueno saber acerca de ellos, MDC tiene una gran documentation on the topic

+0

Excelente, muchas gracias por la respuesta súper rápida y útil. – Gids

+0

Pensé que esto no funcionaría en IE 6, pero de hecho lo hace. Resulta que IE 5 fue la última versión que no admitía una función como el segundo parámetro en String.replace. –

2

Aquí hay una versión sin necesidad de utilizar una expresión regular. Puede usar el método split() de String, aunque francamente utilizaría la versión de expresión regular más ordenada.

var testVar = "My first line\n\nMy second line\n\nMy third line"; 
var lines = testVar.split("\n\n"), newStringParts = []; 
for (var i = 0, len = lines.length; i < len; ++i) { 
    newStringParts.push(i + 1); 
    newStringParts.push(lines[i]); 
} 
alert(newStringParts.join("\n")); 
+1

Siempre es una buena idea mirar las alternativas no regexp –

0

Para reemplazar las rutas de imágenes con sólo nombres en html hice algo gusta esta salida

html='hello <img src="../../../../yahoo/images/icons/common/image_one.png">a<img \ 
src="add.png"> xyz <table><tbody><tr><td>He<img src="document_add.png">loo<img\ 
src="document_add.png"></td></tr></tbody></table><img src="CD_delete.png"><img src="check.png">' 


html.replace(/src="(.*?)"/ig, function($1){return 'src="'+$1.match(/([^\/\\]+)\.(\w+)/)[0]+'"' }); 

será

"hello <img src="image_one.png">a<img src="src="add.png"> xyz <table><tbody><tr><td>He<img src="src="document_add.png">loo<img src="src="document_add.png"></td></tr></tbody></table><img src="src="CD_delete.png"><img src="src="check.png">" 
Cuestiones relacionadas