Tengo que obtener el resultado de esta expresión regular; la expresión regular es una cadena en una variable:
const dataFileUrlRegExpr = new RegExp( "\\/home-affairs\\/document\\/download\\/([\\\\w-]{1,})_en?filename=visa_statistics_for_consulates_20[0-9]{2}.xlsx" ); href = '/home-affairs/document/download/75ecba81-12db-42b0-a628-795d3292c680_en?filename=visa_statistics_for_consulates_2020.xlsx' xlslHrefRegExpResult = dataFileUrlRegExpr.exec(xlslHref);pero la variable xlslHrefRegExpResult es nula.
Si uso:
const dataFileUrlRegExpr = new RegExp( /\/home-affairs\/document\/download\/([\w-]{1,})_en\?filename=visa_statistics_for_consulates_20[0-9]{2}.xlsx/g ); sin la variable de cadena que contiene la expresión, se logra el resultado.
¿Dónde está el error al usar una cadena para construir la expresión regular?
/ en absoluto, porque no hay nada especial dentro de una expresión regular no literal.\w , pero solo una vez.? y la barra invertida en sí.. y la barra invertida en sí. dataFileUrlRegExpr = new RegExp( "/home-affairs/document/download/([\\w-]{1,})_en\\?filename=visa_statistics_for_consulates_20[0-9]{2}\\.xlsx" );En resumen: escriba su expresión regular como de costumbre, pero doble cada barra invertida dentro de ella para que no se interprete como un carácter de escape dentro de la cadena.
El código correcto debería ser:
const dataFileUrlRegExpr = new RegExp( "\\/home-affairs\\/document\\/download\\/([\\w-]{1,})_en\\?filename=visa_statistics_for_consulates_20[0-9]{2}.xlsx", 'g' ); href = '/home-affairs/document/download/75ecba81-12db-42b0-a628-795d3292c680_en?filename=visa_statistics_for_consulates_2020.xlsx' xlslHrefRegExpResult = dataFileUrlRegExpr.exec(href); console.log(xlslHrefRegExpResult) ¿Tenías demasiadas barras invertidas en [\\\\w-] y te faltaban las barras invertidas antes ? ./