我正在尝试用符号“%”替换以特定符号“@”开头的字符串,但条件是该符号应位于字符串的开头。
例如。
@@@hello@hi@@
应该替换为
%%%hello@hi@@
我想出了匹配起始“@”符号的正则表达式,但我只能替换它一次,而不是用它匹配的次数替换它。
代码是
var str = "@@@hello@hi@@";
var exp = new RegExp('^@+', 'g');
var mystr = str.replace(exp, '%');
但是,它输出
%hello@hi@@
但是,预期的输出是
%%%hello@hi@@
我目前的解决方案是这样的:
var str = "@@@hello@hi@@";
var match = str.match(/^@+/g)[0];
var new_str = str.replace(match, "");
var diff_count = str.length-new_str.length;
var new_sub_str = Array(diff_count+1).join("%")
var mystr = new_sub_str + new_str;
这个解决方案确实给了我预期的输出,但我担心性能。
有没有更好的方法来实现这一目标?
最佳答案
您可以使用回调函数:
var mystr = '@@@hello@hi@@'.replace(/^@+/g, function(match) {
return Array(match.length + 1).join('%');
});
document.write(mystr);
Array(n).join(s)
构造只是一种将字符串s
n-1
重复的简写方式。
关于javascript - 替换以某个符号开头的字符串 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34464171/