I have to get the result from this regular expression; the regular expression is a string in a 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);
but the xlslHrefRegExpResult variable is null.
If I use:
const dataFileUrlRegExpr = new RegExp(
/\/home-affairs\/document\/download\/([\w-]{1,})_en\?filename=visa_statistics_for_consulates_20[0-9]{2}.xlsx/g
);
without the string variable containing the expression, the result is achieved.
Where is the error using a string to build the regexp?
CodePudding user response:
The correct code should be:
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)
You had too many backslashes in [\\\\w-]
, and you were missing the backslashes before ?
./
CodePudding user response:
- Don't escape
/
at all, because it's nothing special inside a non-literal regex. - Do escape the backslash in
\w
, but only once. - Do escape the
?
and the backslash itself. - Do escape the
.
and the backslash itself.
dataFileUrlRegExpr = new RegExp(
"/home-affairs/document/download/([\\w-]{1,})_en\\?filename=visa_statistics_for_consulates_20[0-9]{2}\\.xlsx"
);
In short: write your regexp as normal, but double every backslash inside it so that it doesn't get interpreted as an escape character inside the string.