'Regexpr with a string
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?
Solution 1:[1]
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 ?./
Solution 2:[2]
- 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.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Barmar |
| Solution 2 | Thomas |
