我尝试使用正则表达式匹配所有不以" / pt /" 或&#开头的字符串我的路由配置中有34; / en /" 。他们可能有也可能没有其他文字。
所以我想出了这个:
$urlRouterProvider.when('^(?!/(pt|en)/).*', function ($injector, $location) {
const path = $location.path();
$location.path('/pt' + path !== '' ? path : '/').replace();
});
不幸的是,这会引发错误:Invalid parameter name '.' in pattern '^(?!/(pt|en)/).*'
在这种情况下使用正则表达式的正确方法是什么?
修改
我已根据波希米亚响应将表达式从'{(?!\/(pt|en)\/).*}'
更改为'^(?!/(pt|en)/).*'
。但错误仍然存在。
答案 0 :(得分:1)
when
方法没有$injector and $location
services.use rule()
,
将正则表达式更改为/^(?!\/(pt|en)).*/
以符合您的要求。
rule()
<强>参数强>:
handler Function一个函数,它接受$injector
和$location
服务作为参数。您负责将有效路径作为字符串返回。
app.config(function ($urlRouterProvider) {
$urlRouterProvider.rule(function ($injector, $location) {
//what this function returns will be set as the $location.url
var path = $location.path(), normalized = path.toLowerCase();
if ('/pt.asd'.match(/^(?!\/(pt|en)).*/) == undefined) {
// this starts with /pt or /en
// $location.replace().path(normalized);
}
else
{
// this does not starts with /pt or /en
// do some thing
}
});
})