如何调整Angular的URL匹配模式

时间:2013-07-15 16:30:51

标签: regex angularjs air adobe

首先,我想调整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段制作和相关操作仍然有效。

2 个答案:

答案 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应用程序。