JavaScript:将 a 中重复的变量字符替换为"*"



我正试图编写一个函数,用星号替换字符串(任何长度(中单个字符串的重复,例如,如果函数参数为"banana","a",它应该返回:ban*n*——这里的大小写无关

目前,我正试图通过.replaces和regex来实现这一点。

function charReplace (string, x) {
string.replace(/x{2,}/gi, "*");
return string;
};
console.log(charReplace("banana","a")); // output banana
console.log(charReplace("banana","n")); // output banana
console.log(charReplace("Apple","p")); // output Apple

我还尝试添加了repeat运算符(+(,但这引发了一个错误。

function charReplace (string, x) {
string.replace(/x+{2,}/gi, "*"); 
at charReplace
return string;
};
console.log(charReplace("banana","a")); 
console.log(charReplace("banana","n")); 
console.log(charReplace("Apple","p")); 

错误:// Uncaught SyntaxError: Invalid regular expression: /x+{2,}/: Nothing to repeat at charReplace

谢谢你的帮助。

版本1:区分大小写

你可以:

  1. 拆分字符上的字符串
  2. *重新连接字符串
  3. 将第一个*替换为字符

function charReplace (string, x) {
return string.split(x).join('*').replace('*', x);
};
console.log(charReplace("banana", "a")); // output ban*n*
console.log(charReplace("banana", "n")); // output bana*a
console.log(charReplace("Apple",  "p")); // output Ap*le

版本2:不区分大小写

您可以使用RegExp构造函数来使用正则表达式中的变量:

function charReplace (string, x) {
let isFirstMatch = true;
return string.replace(new RegExp(`(${x})`, "gi"), (char) => {
if (isFirstMatch) {
isFirstMatch = false;
return char;
}
return '*';
});
};
console.log(charReplace("banana", "a")); // output ban*n*
console.log(charReplace("banana", "n")); // output bana*a
console.log(charReplace("Apple",  "p")); // output Ap*le
console.log(charReplace("ApPle",  "p")); // output Ap*le

最新更新