我正在AngularJS应用程序中实现html5模式。在服务器中,我需要将没有后缀的所有内容(因此没有扩展名,而不是静态资源)转发到基本URL:
@RequestMapping(value = "/{path:[^\\.]*}")
public String redirect(HttpServletRequest request) {
return "forward:/";
}
这适用于Angular应用程序,但现在人们想要使用HAL浏览器,而且此控制器也会转发某些浏览器请求,例如https://localhost:8080/api。
是否可以修改正则表达式以匹配没有后缀的所有内容(就像现在一样),以及没有/ api的所有内容?
这是当前的正则表达式:
"/{path:[^\\.]*}"
例如:
不应该匹配:
(列表中的最后两个点可以使用当前的正则表达式)
它应匹配:
答案 0 :(得分:1)
看来你可以使用
"/{path:(?!.*api)[^.]*}"
它匹配一个字符串,该字符串在该行的任何位置都没有点且没有api
子字符串。请注意,如果您有多行输入,请使用[\s\S]
代替前瞻中的.
。该模式还允许空字符串(如果不允许空输入,则将最后*
替换为+`。
另外,请注意,如果默认情况下没有锚定模式(我认为它在这里)或者您想在正则表达式测试程序中测试它,则需要添加锚点:"/{path:^(?!.*api)[^.]*$}"
。 ^
锚点匹配字符串的开头,$
锚点匹配字符串的结尾。