Necesito ocultar el apellido de las personas. Para las personas con tres palabras en su nombre, simplemente ocultar última palabra, ej:
Laura Torres Bermudez
pues, deben
Laura Torres ********
y para
Maria Fernanda Gonzales Lopez
debiera ser
Maria Fernanda ******** *****
Creo que son dos expresiones regulares porque se basa en el número de palabras, se aplicará la expresión regular.
Sé que \w+
sustituye a todas las palabras de un solo asterisco, y con (?!\s).
lo que puedo reemplazar caracteres, excepto espacios. Espero que puedas ayudarme. Gracias.
Este es mi ejemplo: https://regex101.com/r/yW4aZ3/942
Una solución de JavaScript que no se basa en el ECMAScript cuenta con 2.018 expresión regular extendida es
s = s.replace(/^(\S+\s+\S+)([\s\S]*)/, function($0, $1, $2) {return $1 + $2.replace(/\S/g, '*');})
detalles:
^
- comenzar de cuerda(\S+\s+\S+)
- Grupo 1: uno o más no-espacios en blanco, 1 o más espacios en blanco y, a continuación 1 o más que no son espacios en blanco([\s\S]*)
- Grupo 2: Cualquiera 1 o más caracteres.
La sustitución es del Grupo 1 contenidos y el contenido del Grupo 2 con cada Char no está en blanco reemplazado con un asterisco.
Solución de Java :
s = s.replaceAll("(\\G(?!^)\\s*|^\\S+\\s+\\S+\\s+)\\S", "$1*");
Vea la demostración de expresiones regulares
detalles
(\G(?!^)\s*|^\S+\s+\S+\s+)
- Grupo 1: ni entonces final del partido anterior (\G(?!^)
) y 0 o más espacios en blanco o (|
) 1+ no espacios en blanco, espacios en blanco y de nuevo 1+ 1+ no espacios en blanco, 1+ espacios en blanco al inicio de la cadena\S
- un char no está en blanco.