仅将RegEx应用于长度大于>的单词2

时间:2018-01-22 14:32:28

标签: javascript regex

我正在寻找一个RegEx表达式,用***替换整个单词,如果它们包含一个数字,但只有在单词超过2个字符的情况下。例如,

男孩连续两天哭了w0lf aga1n! 12 12345

读为

这个男孩连续两天哭了**** *****! 12 *****

要查找带有数字的单词,以下表达似乎有效:

[a-z]*\d+[a-z]*

但我想找到一个解决方案,只找到长度大于2的单词。

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

a demo on regex101.com

<小时/> 分解,这说

\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

<小时/> 您可以用固定模式(即***)替换它,但您需要一个字符串长度函数。