De acuerdo, soy muy nuevo en javascript y tengo una pregunta sobre el uso de expresiones regulares en él.
¿Puedo escribir expresiones regulares y usar .test() como este para una respuesta basada en mensajes de un bot de discordia para probar y dar una respuesta de mensaje como esta en función de si coincide?
let myRegex = /morning/i; if (myRegex.test(msg.content)) { msg.reply("Good Morning!"); } myRegex = /some text/i; if (myRegex.test(msg.content)) { msg.reply("Bot replies to some text"); } myRegex = /some other text/i; if (myRegex.test(msg.content)) { msg.reply("bot replies to some other text"); }Parece que funciona, pero mientras se ejecuta. Pero por alguna razón, parece que esta es la forma incorrecta de hacer las cosas, ya que estoy especificando myRegex cada vez antes de .test().
Antes de esto, inicialmente usaba declaraciones if como esta, pero el problema era que tenía que escribir un mensaje separado cuando había más palabras, ya que solo verificaría ese mensaje exacto:
if (msg.content.toLowerCase() === 'morning') { msg.reply('https://media.giphy.com/media/34dapC0zP8iSQ0wjHX/giphy.gif '); }Me di cuenta de que el segundo código solo funcionaría para entradas de mensajes como 'mañana' o 'Mañana' o 'MAÑANA', pero no funcionaría para 'buenos días' o 'Buenos días', 'BUENOS DÍAS', etc.
Por lo tanto, estoy pensando en pasarme a las expresiones regulares, pero quiero asegurarme de que lo estoy haciendo bien.
¿Puede alguien por favor me ayude con esto?
Lo que estás haciendo está perfectamente bien. El único pequeño problema potencial (que es solo estilístico) es que está reasignando innecesariamente una variable.
Si cree que declarar el patrón con anticipación y ponerlo en una variable parece extraño, puede hacerlo en línea (y es posible que desee usar else if para que no haya múltiples respuestas al mismo mensaje en caso de que coincide con múltiples pruebas)
} else if (/some text/i.test(msg.content)) { msg.reply("Bot replies to some text"); } else if (/some other text/i.test(msg.content)) { msg.reply("bot replies to some other text"); }Para responder a la pregunta, ¿debería redefinir la variable RegEx cada vez? Respuesta corta - No.
Aunque no hay ninguna desventaja obvia en este ejemplo específico, la redefinición de las variables que se usan de esta manera puede generar errores con contenido desconocido.
Alinearía las expresiones regulares, aunque también podría crear una nueva variable para cada verificación. Aquí hay un ejemplo con las expresiones regulares en línea:
if (/morning/i.test(msg.content)) { msg.reply("Good Morning!"); } if (/some text/i.test(msg.content)) { msg.reply("Bot replies to some text"); } if (/some other text/i.test(msg.content)) { msg.reply("Bot replies to some other text"); }Si lo prefiere, puede envolver la expresión regular entre paréntesis.
if ((/morning/i).test(msg.content)) { /* ... */ }