2013-08-02 2 views
2

Par exemple, j'ai une sourceString : 1234\n\n\n\n5678regex le premier 2 n dans un n asequence

et je veux remplacer la première 2 \n dans une séquence \n qui doit être égale ou plus de 2 caractères

donc, le résultat que j'attends GOES : 1234TEST\n\n5678

j'ai essayé : (^|[^\n])\n{2}

et le résultat réel est: 123TEST\n\n5678

http://regex101.com/r/cS6uG3

Quel est le problème avec mon code?

L'idée de base est tirée du tutoriel @Tim Pietzcker sur ma question précédente.

Merci.

Regex to match single new line. Regex to match double new line

+0

Vous voulez remplacer les deux premiers '\ n 'caractères même s'il n'y en a que deux? Par exemple, '1234 \ n \ n5678' devient' 1234TEST5678'? – matts

Répondre

1

Ce qui se passe ici est que:

(^|[^\n])\n{2} 
^-------^ -- this part 

matchs 4 et il est remplacé. Vous devez l'inclure à nouveau dans votre remplacement.

var string = "1234\n\n\n\n5678"; 
string.replace(/(^|[^\n])\n{2}/g, "$1TEST"); 
            ^^-- back-reference 
+0

Merci, Frits. Votre réponse est vraiment claire. Avec mon post précédent, je comprends. –

2

Cette regex base de préanalyse positif devrait fonctionner:

var repl = "1234\n\n\n\n5678".replace(/\n{2}(?=\n{2,})/, "TEST"); 

/\n(?=\n{2,})/ signifie match de \n\n si elle est immédiatement suivie par 2 ou plus \n

+0

Cela ne semble pas fonctionner, j'obtiens le '1234TEST \ n \ n \ n5678' quand je le teste (un' \ n' trop). – Halcyon

+0

Désolé mal lu l'exigence plus tôt, fait une correction, vérifiez-le maintenant. – anubhava

+0

Merci, j'ai une bonne idée de Frits, cependant. –

Questions connexes