首先,我想调整Angular用于匹配URL路由的模式。我找到了该函数,并且它正在针对angular.js(版本http://code.angularjs.org/1.1.5/)的第5612行找到的这些正则表达式运行URL位置:
SERVER_MATCH = /^([^:]+):\/\/(\w+:{0,1}\w*@)?(\{?[\w\.-]*\}?)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,
PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
那我为什么要那样做呢?我使用angular作为桌面AIR应用程序的框架。 AIR应用程序可以使用HTML / JS构建,随后将其包装在AIR中,AIR可以访问文件系统和操作系统。因此,这种组合实际上允许您使用angular构建多平台桌面Web应用程序。强大的东西。
问题是AIR有一个自定义地址栏字符串,它看起来像app:/
而不是http://
。所以它有一个斜杠而不是两个斜杠。 Angular使用地址栏位置来路由应用程序,即http://something.com/#/contactList
表示加载contactList
视图及其关联的控制器。我对正则表达式的了解非常(非常)有限,所以我无法读取上面包含的模式,但我猜测一个斜杠而不是两个或类似的东西可能是问题。
我的目标是调整模式,使app:/
成为有效模式,我希望URI段制作和相关操作仍然有效。
答案 0 :(得分:1)
请参阅Mozilla正则表达式doc:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
@shaunhusain在评论中已经解释的内容大多是正确的,除了以下内容:
\w
匹配单个字母数字字符或下划线+
匹配前一个字符的1个或多个(不是0或1)因此,\w+
匹配长度为1或更多字符的单词。
如果要匹配app:/
之类的内容,则需要将正则表达式修改为冒号后只有一个斜杠。
答案 1 :(得分:0)
Mark的答案是正确的,这是改变的Angular代码的样子:
//** CHANGED REGEX TO MATCH ON 'app:/' as well
var SERVER_MATCH = /^([^:]+):\/+(\w+:{0,1}\w*@)?(\{?[\w\.-]*\}?)(:([0-9]+))?(\/[^\?#]*)? (\?([^#]*))?(#(.*))?$/, //var SERVER_MATCH = /^([^:]+):\/\/(\w+:{0,1}\w*@)?(\{?[\w\.-]*\}?)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,
我在5612号线或附近发现了它。警告:我不知道是否会有这种改变的有害副作用。一般的想法只是让角度匹配app:/因为它会http://所以它可以作为一个Air应用程序。