3 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
在你需要為你的解析應(yīng)用這么多條件的情況下(單詞必須有長(zhǎng)度== 8,2個(gè)字母字符,2個(gè)以上數(shù)字字符,沒(méi)有特殊字符),我認(rèn)為你應(yīng)該努力尋找你可以閱讀的解決方案而不是扔一切復(fù)雜的正則表達(dá)式中的一切。
您的代碼將如下所示:
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);
目前還不清楚你在這里做了什么,最終的錯(cuò)誤和/或邏輯的變化將難以維持。相反,您可以利用函數(shù)替換參數(shù)來(lái)細(xì)分規(guī)則。你會(huì)有這樣的事情:
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);
它更冗長(zhǎng),但也更具可讀性和可調(diào)試性。
希望能幫助到你!
添加回答
舉報(bào)