Angular html5模式和HAL浏览器

时间:2016-07-29 08:20:43

标签: java angularjs regex spring spring-boot

我正在AngularJS应用程序中实现html5模式。在服务器中,我需要将没有后缀的所有内容(因此没有扩展名,而不是静态资源)转发到基本URL:

@RequestMapping(value = "/{path:[^\\.]*}")
public String redirect(HttpServletRequest request) {
    return "forward:/";
}

这适用于Angular应用程序,但现在人们想要使用HAL浏览器,而且此控制器也会转发某些浏览器请求,例如https://localhost:8080/api

是否可以修改正则表达式以匹配没有后缀的所有内容(就像现在一样),以及没有/ api的所有内容?

这是当前的正则表达式:

"/{path:[^\\.]*}"

例如:

不应该匹配:

  • 什么/ API
  • 什么/ apianything
  • 什么/ filename.extension
  • 什么/ filename.extensionanything

(列表中的最后两个点可以使用当前的正则表达式)

它应匹配:

  • 上面未列出的所有内容

1 个答案:

答案 0 :(得分:1)

看来你可以使用

"/{path:(?!.*api)[^.]*}"

它匹配一个字符串,该字符串在该行的任何位置都没有点且没有api子字符串。请注意,如果您有多行输入,请使用[\s\S]代替前瞻中的.。该模式还允许空字符串(如果不允许空输入,则将最后*替换为+`。

另外,请注意,如果默认情况下没有锚定模式(我认为它在这里)或者您想在正则表达式测试程序中测试它,则需要添加锚点:"/{path:^(?!.*api)[^.]*$}"^锚点匹配字符串的开头,$锚点匹配字符串的结尾。