Tengo un problema simple con el que creo que necesito ayuda. Entonces, tengo una función que acepta una cadena en este formato
"1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)" sin las comillas.
Básicamente, una lista de nombres de personas con número de rango.
Lo que quiero es dividirlos de manera que obtenga el resultado ff:
[ "1. Crowe, Velvet (LoC)", "2. Hume, Eleanor (Ext)", "4. Shigure, Rokurou (DmN)", "10. Mayvin, Magilou (MgC)" ] ¿Hay una manera de hacer eso? Usé el método split() pero divide la cadena cada vez que ve una coma.
Podrías dividir usando una expresión regular /(?<=\)),\s/ :
const str = "1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)"; const res = str.split(/(?<=\)),\s/); console.log(res); Esto se dividirá en ), como lo sugiere cmgchess en los comentarios. El problema con la división basada en una cadena es que elimina algunos de los caracteres que desea conservar. En su lugar, mediante el uso de una expresión regular, puede usar (?<=\)) (aquí ?<= se llama una búsqueda positiva detrás ) para hacer coincidir y mantener el ) en el elemento dividido resultante. El ,\s luego se divide en base a una coma seguida de un espacio ( \s ).
También puede usar la siguiente expresión regular con .match() que es un poco más robusta, pero es posible que deba actualizarse según el texto que puede aparecer después de su número/rango:
/\d+\.\s\w+,\s\w+\s\(\w+\)/gLo anterior realiza:
\d+\. : Coincidirá con uno o más ( + ) dígitos seguidos de un punto\s : coincide con un carácter de espacio en blanco\w+, : Coincide con uno o más ( + ) caracteres de palabra ( \w ) seguidos de una coma ,\s : Coincide con un espacio\(\w+\) : Coincidencia de caracteres de palabras entre paréntesis ( )/g : indicador global para hacer coincidir las secuencias de todas las apariciones en la cadena const str = "1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)"; const res = str.match(/\d+\.\s\w+,\s\w+\s\(\w+\)/g); console.log(res);Solo una pequeña mejora de la respuesta de @cmgchess (agregue el método de trim para eliminar espacios innecesarios):
const getUsers = (str) => { const users = str.split('),').map(x => x.trim() + ')'); users[users.length - 1] = users[users.length - 1].replace('))', ')'); return users; } console.log(getUsers("1. Crowe, Velvet (LoC), 2. Hume, Eleanor (Ext), 4. Shigure, Rokurou (DmN), 10. Mayvin, Magilou (MgC)"));