3 回答
TA贡献1877条经验 获得超1个赞
在你需要为你的解析应用这么多条件的情况下(单词必须有长度== 8,2个字母字符,2个以上数字字符,没有特殊字符),我认为你应该努力寻找你可以阅读的解决方案而不是扔一切复杂的正则表达式中的一切。
您的代码将如下所示:
let s = "papave23 ciao il mio pin papaver1 è reeredji332ji con vaff8loe 1234567o 123t123t papavero 9o 123t123y";
s = s.replace(/\b(?=(?:[0-9]*[a-zA-Z]){2})(?=(?:[a-zA-Z]*[0-9]){2})[a-zA-Z0-9]{8}\b/g, "********");
console.log(s);
目前还不清楚你在这里做了什么,最终的错误和/或逻辑的变化将难以维持。相反,您可以利用函数替换参数来细分规则。你会有这样的事情:
let s = "papave23 ciao il mio pin papaver1 è reeredji332ji con vaff8loe 1234567o 123t123t papavero 9o 123t123y";
// The first regex filters only 8-length words
s = s.replace(/\b\w{8}\b/g,
function(fullMatch) {
// .match() can return null if no match is found,
// so I'm accounting for this.
const digitMatch = fullMatch.match(/\d/g) || [];
const letterMatch = fullMatch.match(/[a-zA-Z]/g) || [];
const specialCharMatch = fullMatch.match(/\[^a-zA-Z0-9]/g);
if (digitMatch.length >= 2
&& letterMatch.length >= 2
&& specialCharMatch === null) {
return "********";
} else {
return fullMatch;
}
});
console.log(s);
它更冗长,但也更具可读性和可调试性。
希望能帮助到你!
添加回答
举报