是否可以使用正则表达式来匹配$ urlRouterProvider上的url?

时间:2016-10-21 12:35:14

标签: angularjs regex angular-ui-router

我尝试使用正则表达式匹配所有不以" / 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)/).*'。但错误仍然存​​在。

1 个答案:

答案 0 :(得分:1)

when方法没有$injector and $location services.use rule()

将正则表达式更改为/^(?!\/(pt|en)).*/以符合您的要求。

Check the regexp here

用于自定义网址处理的

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
            }
      });
})

Reference you are looking for