[ACTUALIZADO]
En un esfuerzo por limpiar una serie de cadenas que contienen nombres de personas, así como otros títulos o ID de usuario (si están presentes), necesito eliminar los caracteres que no sean letras, así como todos los caracteres que están entre paréntesis, comillas, corchetes, etc
Por ejemplo ["Sean Jackson(he/him)", "Mack $ Adams"] debe cambiarse por ["Sean Jackson", "Mack Adams"] .
Para lograr esto, necesito escribir una expresión regular que pueda coincidir con tales instancias, pero desafortunadamente mi expresión regular no funciona según lo previsto.
let names = [ 'Sean Jackson (he/him)', 'Steven Robinson', 'Mack $ Adams', 'Keira (12345) Nightly', ]; for (i in names) { names[i] = names[i].replace(/\W*\W/g, ''); } console.log(names);El código anterior devuelve:
["SeanJacksonhehim", "StevenRobinson", "MackAdams", "Keira12345Nightly"]Mientras que lo que quiero es:
["Sean Jackson", "Steven Robinson", "Mack Adams", "Keira Nightly"]Entonces, después de investigar un poco y con los útiles comentarios de la comunidad, encontré la siguiente solución funcional.
Dado que un espacio se cuenta como un carácter no alfanumérico en sí mismo ( \s es capturado por la expresión regular no alfanumérica \W ), tuve que especificar que dos caracteres no alfanuméricos consecutivos deben estar en el lado izquierdo de la cadena de destino (por lo tanto usando \W{2} ).
Y luego, en el lado derecho de la cadena de destino, debe haber cualquier número de caracteres, excepto el espacio \S* .
let names = [ 'Sean Jackson (he/him)', 'Steven Robinson', 'Mack $ Adams', 'Keira (12345) Nightly' ]; for (i in names) { names[i] = names[i].replace(/\W{2}\S*/g, ''); //removes the following patter: [any two non-alphanumerical character followed by any number of any characters except for space] } console.log(names);