javascript - 替换以某个符号开头的字符串 n 次

标签 javascript regex

我正在尝试用符号“%”替换以特定符号“@”开头的字符串,但条件是该符号应位于字符串的开头。

例如。

@@@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/

相关文章:

java - 是什么让 scala.util.matching.regex 库与 java.util.regex 库不同?

javascript - hottowel undefined 不是一个函数

javascript - safari 开发者工具 如何查看来自 iframe 的表达式?

javascript - Raphael.js 在哪里存储使用 element.data() 方法设置的元素数据?

javascript - 为什么我的 event.target 数据在 chrome 中不起作用?

javascript - 如何使用 javascript 正则表达式全局查找并替换文本区域中字符串的开头

javascript - 如何在 HTML 中将用户输入的列表从最低值到最高值排序

java - 在字符串中查找 JSON 对象

regex - 正则表达式否定两个非此即彼的词

ios - 在 iOS 中查找字符串中的标签