Como dice el título, necesito un Regex para verificar si una cadena tiene estas cuatro palabras (Actualizar, Retroceder, Omitir, Ahora no) y solo devolverlas si todas están presentes, si no, no devuelve nada.
Aquí hay un ejemplo: {"Update":"iVBORw0KGgo","Rollback":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}
En este caso, debería devolver [Actualizar, Retroceder, Omitir, Ahora no]
{"Update":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}
En este caso, no debería devolver ningún valor.
Traté de crear uno por mí mismo, pero mi conocimiento de Regex es muy básico: (Update|Rollback|Skip|Not Now)
¡Gracias por adelantado!
EDITAR
Noté que Regex podría no ser la mejor manera de lograr esto.
Como alternativa a las expresiones regulares, puede usar JSON.parse para analizar la cadena en un objeto y Object.keys para obtener las propiedades:
const str = `{"Update":"iVBORw0KGgo","Rollback":"iVBORw0KGgo","Skip":"iVBORw0KGgo","Not Now":"iVBORw0KGgo"}`; const keys = Object.keys(JSON.parse(str)) const result = keys.sort().toString() == "Not Now,Rollback,Skip,Update" ? keys : ""; console.log(result)Si bien la expresión regular claramente no es una buena herramienta para el trabajo, puede hacer algo como esto:
re.match("(?=.*Update.*)(?=.*Skip.*)",string) "(?=WORD)" coincide si sigue la expresión, pero no consume nada de la cadena.
Por supuesto, complete la expresión regular con las 4 palabras que desee de manera similar.
También tenga en cuenta que la expresión regular por sí sola no devuelve nada. Necesitas codificar para esto.
Utilizar este:
^(?=.*"Update"\s*:)(?=.*"Rollback"\s*:)(?=.*"Skip"\s*:)(?=.*"Not Now"\s*:) (?=...) significa que si mira hacia adelante, encontrará este patrón.
Entonces, una coincidencia vacía regresará tan pronto como encontremos estos 4 patrones.