2017-09-21 3 views
-3

Ich habe eine RegEx dieses Formulars /\\.br<[0-9]+>\\/g und ich möchte es im Haupttext durch die Anzahl der neuen Linien zwischen der <> in der RegEx ersetzt ersetzen.Ersetze abhängig vom Wert der RegEx JS

Ex.

Eingang
Hello \.br<3>\ World! 

Ausgang:

Hello 


World! 
+4

Willkommen bei SO. Siehe [So stellen Sie eine gute Frage] (https://stackoverflow.com/help/how-to-ask). Es ist kein Code-Schreibdienst. – Utkanos

+1

Schauen Sie in den Callback auf 'String.prototype.replace'. –

+0

nicht * Anzahl der Leerzeichen *, aber die Anzahl der Zeilenumbrüche, nehme ich an – RomanPerekhrest

Antwort

0

Ihre regex /\\.br<[0-9]+>\\/g ist falsch. . im Regex-Kontext bedeutet "ein beliebiges Zeichen außer Zeilenumbrüchen". Daher müssten Sie dem Punkt in Ihrer Regex entkommen.

/\\\.br<[0-9]+>\\/g 
/(\\\.br<([0-9]+)>\\)/g 

Als nächstes, wenn Sie sich ansehen String.prototype.replace wie von T.J. Crowder, kommt die folgende Lösung in dem Sinne:

function replacer(match, p1, p2, offset, string) { 
 
     let result = ''; 
 
     for (let i = 0; i < Number(p2); i++) { 
 
     result += '\n'; 
 
     } 
 
     return result; 
 
    } 
 
    var newString = String('Hello \\.br<3>\\ World!').replace(/(\\\.br<([0-9]+)>\\)/g, replacer); 
 
    console.log(newString);

Beachten Sie, dass die hartcodierte Zeichenfolge im Code 2 \\ enthält, da dies ein Escape-Zeichen ist. Wenn Sie die Zeichenfolge vom Benutzer über ein Textfeld erhalten, reicht die Eingabe eines \ aus.

Verwandte Themen