假设我有一个字符串:
"__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)
"__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).提供给此函数的参数>在下面的"将函数指定为参数"部分中进行了描述.
试试这个:
var str = "__3_";
str = str.replace(/[0-9]+/, function(x) {
return '#'.repeat(x);
});
alert(str);Run Code Online (Sandbox Code Playgroud)