Tengo un comando para un bot en el que trabajo que es el siguiente:
.command @user @user2 (user list can grow etc..) itemLa expresión regular actual que estoy usando es
/([.command]+ [@A-Za-z0-9_?]+ [A-Za-z0-9]+)/gEl problema que tengo es que lo necesito para encontrar a cada usuario en lugar de solo la primera aparición. Idealmente, también me gustaría poder apuntar a que cada usuario comience con un carácter "@".
Cualquier ayuda en esto apreciada.
Usar
/^\.([az]+)\s+((?:@[\w?]+\s+)+)(\w+)/iEl grupo de captura 1 es el comando.
El grupo de captura 2 contendrá todos los parámetros @user , puede usar .split(/\s+/) para dividirlo en usuarios separados.
El grupo de captura 3 es el elemento al final
Esta es una (de muchas) solución:
function getUsers(command){ var result = []; var index = command.indexOf("@"); while(index>-1){ var i1 = command.indexOf("@", index); var i2 = command.indexOf(" ", i1); if(i2==-1){i2 = command.length;} var user = command.substr(i1, i2-i1); index = command.indexOf("@", i2); result.push(user); } return result; } getUsers("cmd @a1 @a2 @a3 ckkasd @a5 a6 @a7")Este no usa expresiones regulares. Consumirá menos memoria y se ejecutará más rápido para cadenas grandes.