我正在AngularJS应用程序中实现html5模式。在服务器中,我需要将没有后缀(因此没有扩展名,不是静态资源)的所有内容转发到基本url:
@RequestMapping(value = "/{path:[^\\.]*}")
public String redirect(HttpServletRequest request) {
return "forward:/";
}
这对于Angular应用程序来说可以正常工作,但是现在人们希望使用HAL浏览器,并且该控制器还转发了一些浏览器请求,例如https:// localhost:8080 / api。
是否可以修改正则表达式以匹配不带后缀的所有内容(如现在)以及不带/ api的所有内容?
这是当前的正则表达式:
"/{path:[^\\.]*}"
例如:
它不应该匹配:
(列表中的最后两点可以使用当前的正则表达式确定)
它应该匹配:
看来您可以使用
"/{path:(?!.*api)[^.]*}"
它匹配行上没有点且没有api
子串的字符串。请注意,如果您有多行输入,请使用[\s\S]
而不是.
内部的lookahead。该模式还允许使用空字符串(*
如果不允许使用空输入,请用+`替换最终字符)。
另外,请注意,如果默认情况下未锚定模式(我想在这里),或者您想在正则表达式测试器中对其进行测试,则需要添加锚点:"/{path:^(?!.*api)[^.]*$}"
。该^
锚字符串的开头匹配和$
锚字符串的结尾匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句