2016-05-29 134 views
7

比方說,我有一個字符串:用字符代替,一個整數(N)重複n次

"__3_" 

...我想變成:

"__###_" 

基本上更換整數,重複出現#相當於整數值。我怎樣才能做到這一點?

我明白反向引用可以與str.replace()

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

使用,我們可以使用str.repeat(n)重複串序列n倍。

但是我怎樣才能使用.replace()作爲參數.repeat()的反向引用?例如,這不起作用:

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

'/(x)\ 1 /'匹配「xx」,其中'\ 1'是反向參考。 「$ 1」不是反向參考,它是一種特殊的替換模式。 – leaf

回答

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

如果你使用通天塔或其他ES6工具將是

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

如果您需要"#".repeat(11)更換__11+ - 變化的正則表達式爲/\d+/

是你想要的嗎?

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

str.replace(正則表達式| SUBSTR,newSubStr |功能)

,如果您使用的功能爲第二PARAM

功能(替換) 一函數被調用來創建新的子字符串(以替代從參數#1接收到的>子字符串)。提供給該函數的參數>在下面的「將函數指定爲參數」一節中進行了描述。

+1

你其實不需要'+'。 – ryeballar

+0

謝謝你的答案,是的,應該做的伎倆。 –

+0

@ryeballar其實你呢。否則'11'會替換爲###而不是'###########'等等。等等我不知道我只是看着編輯,'match'被'match'替換。但正則表達式確實需要更改爲'/ \ d +/g' –

5

試試這個:

var str = "__3_"; 
 

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

 
alert(str);

+0

感謝您的答案,不幸的是,@ Vasiliy回答了一點早。 –

0

試試這個:

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

老式的方法:

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