我正试图编写一个函数,用星号替换字符串(任何长度(中单个字符串的重复,例如,如果函数参数为"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:区分大小写
你可以:
- 拆分字符上的字符串
- 用
*
重新连接字符串 - 将第一个
*
替换为字符
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