我有一个包含字符串的数组,例如
/en/about
/fr/a-propos
/de/uber
/something-else
我想测试给定的字符串(例如"/about"(是否与/en/about 匹配
更具体地说,我想知道它是否与"斜杠 + 正好 2 个小写字母字符 +/about"匹配
我的工作方式是这样的:
const routes = [
'/en/about',
'/fr/a-propos',
'/de/uber',
'/something-else',
];
const regEx = /^(/[a-z]{2}b(/about)b)$/;
Object.keys(routes).forEach((k) => {
if (regEx.test(routes[k])) {
console.log(`redirecting /about to ${routes[k]}`);
}
});
现在..非常简单..我想使用变量而不是硬编码"/about"。我需要将"/about"放在变量中并使用它来测试。我知道我应该使用RegExp
来完成此操作,但是我已经尝试了半个小时,无法弄清楚如何将上述正则表达式转换为可与RegExp
和变量一起使用的正则表达式
感谢您的帮助!
你可以像这样使用它:
const routes = [
'/en/about',
'/fr/a-propos',
'/de/uber',
'/something-else',
];
const suffix = '/about';
const regEx = new RegExp(`^/[a-z]{2}${suffix}$`);
routes.forEach(k => {
if (regEx.test(k)) {
console.log(`redirecting /about to ${k}`);
}
});
- 您需要
RegExp
对象创建 - 您还可以简化
forEach
循环迭代 - 无需在
^
或/
之后以及$
或/
之前使用单词边界/
因为不是单词字符,并且锚点也是边界匹配器。