用重复n次的字符替换整数(n)

时间:2016-05-29 07:11:25

标签: javascript regex

假设我有一个字符串:

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

4 个答案:

答案 0 :(得分:7)

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

如果你使用babel或其他es6工具,它将是

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

如果您需要将__11+替换为"#".repeat(11),请将正则表达式更改为/\d+/

是你想要的吗?

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

  

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

如果你使用函数作为第二个参数

  

功能(替换)   要调用以创建新子字符串的函数(用于替换从参数#1接收的>子字符串)。提供给该函数的参数>在"将函数指定为参数"以下部分。

答案 1 :(得分:5)

试试这个:



var str = "__3_";

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

alert(str);




答案 2 :(得分:2)

老式方法:

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

答案 3 :(得分:0)

试试这个:

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