带字符串的正则表达式
Regexpr with a string
我必须从这个正则表达式中得到结果;正则表达式是变量中的字符串:
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);
但是 xlslHrefRegExpResult 变量为空。
如果我使用:
const dataFileUrlRegExpr = new RegExp(
/\/home-affairs\/document\/download\/([\w-]{1,})_en\?filename=visa_statistics_for_consulates_20[0-9]{2}.xlsx/g
);
没有包含表达式的字符串变量,就得到了结果。
使用字符串构建正则表达式的错误在哪里?
- 根本不要转义
/
,因为它在 non-literal 正则表达式中没有什么特别之处。
- 转义
\w
中的反斜杠,但只能转义一次。
- 转义
?
和反斜杠本身。
- 转义
.
和反斜杠本身。
dataFileUrlRegExpr = new RegExp(
"/home-affairs/document/download/([\w-]{1,})_en\?filename=visa_statistics_for_consulates_20[0-9]{2}\.xlsx"
);
简而言之:正常编写正则表达式,但将其中的每个反斜杠加倍,这样它就不会被解释为字符串中的转义字符。
正确的代码应该是:
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)
您在 [\\w-]
中的反斜杠太多,而在 ?
之前缺少反斜杠。/
我必须从这个正则表达式中得到结果;正则表达式是变量中的字符串:
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);
但是 xlslHrefRegExpResult 变量为空。
如果我使用:
const dataFileUrlRegExpr = new RegExp(
/\/home-affairs\/document\/download\/([\w-]{1,})_en\?filename=visa_statistics_for_consulates_20[0-9]{2}.xlsx/g
);
没有包含表达式的字符串变量,就得到了结果。
使用字符串构建正则表达式的错误在哪里?
- 根本不要转义
/
,因为它在 non-literal 正则表达式中没有什么特别之处。 - 转义
\w
中的反斜杠,但只能转义一次。 - 转义
?
和反斜杠本身。 - 转义
.
和反斜杠本身。
dataFileUrlRegExpr = new RegExp(
"/home-affairs/document/download/([\w-]{1,})_en\?filename=visa_statistics_for_consulates_20[0-9]{2}\.xlsx"
);
简而言之:正常编写正则表达式,但将其中的每个反斜杠加倍,这样它就不会被解释为字符串中的转义字符。
正确的代码应该是:
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)
您在 [\\w-]
中的反斜杠太多,而在 ?
之前缺少反斜杠。/