2016-05-29 7 views
7

Sagen wir, ich habe eine Zeichenfolge:eine ganze Zahl (n) mit einem Zeichen Ersetzen n-mal wiederholt

"__3_" 

... die ich in drehen möchte:

"__###_" 

im Grunde ein Ersatz Ganzzahl mit wiederholten Vorkommen von # entspricht dem Ganzzahlwert. Wie kann ich das erreichen?

Ich verstehe, dass Rückreferenzierungen mit str.replace()

var str = '__3_' 
str.replace(/[0-9]/g, 'x$1x')) 
> '__x3x_' 

verwendet werden, und dass wir str.repeat(n) verwenden können, um String-Sequenzen n mal zu wiederholen. Wie kann ich die Rückreferenz von .replace() als Argument von .repeat() verwenden? Zum Beispiel funktioniert das nicht:

str.replace(/([0-9])/g,"#".repeat("$1")) 
+2

'/ (x) \ 1 /' stimmt mit "xx" überein, wobei '\ 1' eine Rückreferenz ist. "$ 1" ist keine Rückreferenz, es ist ein spezielles Ersatzmuster. – leaf

Antwort

7
"__3_".replace(/\d/, function(match){ return "#".repeat(+match);}) 

wenn Sie babel oder andere es6 Tool wird es

"__3_".replace(/\d/, match => "#".repeat(+match)) 

sein, wenn Sie __11+ mit "#".repeat(11) ersetzen müssen - Änderung regexp in /\d+/

ist es was du willst?

Nach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

str.replace (regexp | substr, newSubStr | Funktion)

und wenn Sie verwenden Funktion als zweite param

Funktion (Ersatz) A Funktion, die aufgerufen wird, um die neue Teilzeichenfolge zu erstellen (anstelle der Teilzeichenfolge, die von Parameter 1 empfangen wird). Die Argumente für diese Funktion> sind im Abschnitt "Eine Funktion als Parameter angeben" beschrieben.

+1

Sie brauchen eigentlich nicht das '+'. – ryeballar

+0

Danke für die Antwort, ja, das sollte den Trick tun. –

+0

@ryeballar tatsächlich tun Sie. Andernfalls würde "11" durch "##" statt "###########" usw. ersetzt werden. Warten Sie, bis ich den Schnitt betrachtet habe, wo '+ match' durch' match' ersetzt wurde.Aber die Regexp muss in '/ \ d +/g' geändert werden. –

5

Versuchen Sie folgendes:

var str = "__3_"; 
 

 
str = str.replace(/[0-9]+/, function(x) { 
 
     
 
    return '#'.repeat(x); 
 
}); 
 

 
alert(str);

+0

Danke für die Antwort, leider @Vasiliy antwortete ein wenig vorhin. –

0

Try this:

var str = "__3_"; 
str = str.replace(/[0-9]/g,function(a){ 
    var characterToReplace= '#'; 
    return characterToReplace.repeat(a) 
}); 
2

Altmodische Ansatz:

"__3__".replace(/\d/, function (x) { 
    return Array(+x + 1).join('#'); 
}); 
Verwandte Themen