2009-12-24 4 views
5

Je veux remplacer les lignes vides dans ma chaîne avec un numéro d'itérerUtilisation de JavaScript RegExp pour remplacer chaque match avec un numéro d'itérer

par exemple remplacer

chaîne:

"My first line 

My second line 

My third line" 

avec

" 
1 

My first line 

2 

My second line 

3 

My third line" 

Je peux et à remplacer ces lignes à l'aide

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

Cependant, je me bats pour ajouter une fonction qui ajoutera un numéro d'itération à chacun.

Pouvez-vous m'aider?

TIA,

Gids

+0

S'il vous plaît indentent vos blocs de code avec quatre espaces au début de chaque ligne. – Gumbo

+0

Merci pour le heads-up, veillera à ce que je le fais à l'avenir – Gids

Répondre

8

Oui, vous pouvez le faire en javascript. Vous avez juste besoin de passer une fonction en tant que second argument à replace.

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

obtenir effectivement beaucoup de paramètres sur la base que vous pouvez décider de la valeur que vous souhaitez remplacer par mais nous ne pas besoin d'eux pour cette tâche.

Cependant, il est bon de savoir à leur sujet, le MDC a un grand documentation on the topic

+0

Grand, merci beaucoup pour la réponse super-rapide et utile. – Gids

+0

Je pensais que cela ne fonctionnerait pas dans IE 6, mais en fait, il le fait. Il s'avère que IE 5 était la dernière version qui ne prenait pas en charge une fonction en tant que second paramètre de String.replace. –

2

Voici une version sans utiliser une expression régulière. Vous pouvez utiliser la méthode split() de String, même si franchement j'utiliserais la version d'expression régulière plus propre.

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

C'est toujours une bonne idée de regarder les alternatives non-regexp –

0

Pour remplacer les chemins d'image avec seulement les noms en html je ne STH aime ce

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]+'"' }); 

sortie sera

"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">"