Java 角度html5模式和HAL浏览器
我正在AngularJS应用程序中实现html5模式。在服务器中,我需要将没有后缀的所有内容(因此没有扩展,不是静态资源)转发到基本url:Java 角度html5模式和HAL浏览器,java,angularjs,regex,spring,spring-boot,Java,Angularjs,Regex,Spring,Spring Boot,我正在AngularJS应用程序中实现html5模式。在服务器中,我需要将没有后缀的所有内容(因此没有扩展,不是静态资源)转发到基本url: @RequestMapping(value = "/{path:[^\\.]*}") public String redirect(HttpServletRequest request) { return "forward:/"; } 这对于Angular应用程序来说很好,但是现在人们想要使用HAL浏览器,并且这个控制器也在转发一些浏览器请求,比
@RequestMapping(value = "/{path:[^\\.]*}")
public String redirect(HttpServletRequest request) {
return "forward:/";
}
这对于Angular应用程序来说很好,但是现在人们想要使用HAL浏览器,并且这个控制器也在转发一些浏览器请求,比如
是否可以修改正则表达式以匹配没有后缀的所有内容(就像现在一样),以及没有/api的所有内容
这是当前的正则表达式:
"/{path:[^\\.]*}"
例如:
它不应匹配:
- 任何东西/api
- 任何事
- 任何东西/filename.extension
- anything/filename.extensionanything
- 上面没有列出的一切
"/{path:(?!.*api)[^.]*}"
它匹配一个字符串,该字符串在行的任何位置都没有点和子字符串。请注意,如果您有多行输入,请使用[\s\s]
,而不要使用前瞻中的
。该模式还允许空字符串(如果不允许空输入,则将final*
替换为+`)
另外,请注意,如果模式在默认情况下没有被锚定(我认为它在这里),或者您希望在regex测试程序中测试它,那么您需要添加锚定:
“/{path:^(?。*api)[^.]*$}”
。^
锚点匹配字符串的开头,而$
锚点匹配字符串的结尾。请尝试“/{path:^(?https?://././[^/]+)[^.]*}”
但为什么选择https?它应该匹配没有扩展的所有内容和没有api的所有内容。我将编辑以添加一个examplesOk列表,请尝试以下操作:“/{path:^(?)(?:.[^/])?api)[^.]*$}”您可以。最后它是这样工作的:“/{path:(?!(?:*)api)[^.]*}”它似乎工作正常。最后一个问题,如果我想匹配一个没有点的字符串,并且在行首没有api子字符串(api不在任何地方,但不仅仅在行首),要匹配行首的模式,需要^
锚定或(?m^
或(^\n)
。因此,您需要类似于(^ |\n)(?!api)[^.]*$