我需要隐藏人员的姓氏。对于名字中包含三个单词的人,只需隐藏最后一个单词,ej:
Laura Torres Bermudez
应该
Laura Torres ********
和用于
Maria Fernanda Gonzales Lopez
应该是
Maria Fernanda ******** *****
我认为它们是两个正则表达式,因为根据单词数,将应用正则表达式。
我知道\w+
将所有单词替换为一个星号,并且使用(?!\s).
我可以替换除空格以外的字符。我希望你能帮助我。谢谢。
不依赖ECMAScript 2018扩展正则表达式功能的JavaScript解决方案
s = s.replace(/^(\S+\s+\S+)([\s\S]*)/, function($0, $1, $2) {return $1 + $2.replace(/\S/g, '*');})
详细信息:
^
-字符串开头(\S+\s+\S+)
-组1:一个或多个非空白,1个或多个空白,然后1个或多个非空白]([\s\S]*)
-组2:任意1个或多个字符。替换为组1的内容,组2的内容,每个非空白字符用星号替换。
Java解决方案:
s = s.replaceAll("(\\G(?!^)\\s*|^\\S+\\s+\\S+\\s+)\\S", "$1*");
请参见regex demo
详细信息
(\G(?!^)\s*|^\S+\s+\S+\s+)
-组1:然后是上一个匹配项的结尾(\G(?!^)
)和0个或多个空格,或(|
)1+个非空格,1 +个空格以及1+个非空格,1 +字符串开头的空格\S
-一个非空白字符。尝试一下:
(?<=\w+\s+\w+\s+.*)[^\s]
说明:
?<=
是负向后看-仅匹配指定模式前面的出现[^\s]
/匹配除空格以外的所有内容(您使用过的-(?!\s).
-实际上是对超前用途的怪异用法-“查找下一个字符,如果不是空白字符,则匹配任何字符”)][请注意,对于只有两个字的人来说,它不会隐藏任何东西(在许多国家中很常见)。>
[此外,该测试工具的正则表达式必须稍作修改以匹配每行一个名称-请参见\w
(已添加\s
以从每行的开头进行匹配,并设置了“多行”标志)。
有兴趣的话可以在JavaScript