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

Reu*_* L. 7 javascript regex

假设我有一个字符串:

"__3_"
Run Code Online (Sandbox Code Playgroud)

...我想变成:

"__###_"
Run Code Online (Sandbox Code Playgroud)

基本上用重复出现的#等价于整数值的整数替换.我怎样才能做到这一点?

我知道反向引用可以用于 str.replace()

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

我们可以str.repeat(n)用来重复字符串序列n次数.

但是我怎样才能使用后向引用.replace()作为参数.repeat()呢?例如,这不起作用:

str.replace(/([0-9])/g,"#".repeat("$1"))
Run Code Online (Sandbox Code Playgroud)

Vas*_*huk 7

"__3_".replace(/\d/, function(match){ return "#".repeat(+match);})
Run Code Online (Sandbox Code Playgroud)

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

"__3_".replace(/\d/, match => "#".repeat(+match))
Run Code Online (Sandbox Code Playgroud)

如果需要更换__11+"#".repeat(11)-改变成正则表达式/\d+/

这是你想要的吗?

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

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

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

function(replacement)要调用以创建新子字符串的函数(用于替换从参数#1接收的> substring).提供给此函数的参数>在下面的"将函数指定为参数"部分中进行了描述.


Ali*_*dov 6

试试这个:

var str = "__3_";

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

alert(str);
Run Code Online (Sandbox Code Playgroud)