我正在寻找一个RegEx表达式,用***替换整个单词,如果它们包含一个数字,但只有在单词超过2个字符的情况下。例如,
男孩连续两天哭了w0lf aga1n! 12 12345
读为
这个男孩连续两天哭了**** *****! 12 *****要查找带有数字的单词,以下表达似乎有效:
[a-z]*\d+[a-z]*
但我想找到一个解决方案,只找到长度大于2的单词。
答案 0 :(得分:0)
使用replace
的回调函数并检查单词的长度:
show
修改:如果替换始终为字符串'***'(基于Jan's answer):
var str = 'The boy cried w0lf aga1n for 2 days in row! 12 12345';
var r = /[a-z]*\d+[a-z]*/g;
var replacedStr = str.replace(r, function(v){
return v.length <= 2 ? v : '*'.repeat(v.length);
});
console.log(replacedStr);
答案 1 :(得分:0)
您可以使用
\b(?=[^\d\W]*?\d)\w{3,}\b
<小时/>
分解,这说
\b # a word boundary
(?=[^\d\W]*?\d) # a pos. lookahead, making sure there's a digit in the word
\w{3,} # at least three word characters
\b # another word boundary
<小时/> 您可以用固定模式(即
***
)替换它,但您需要一个字符串长度函数。