1

首先,我想调整 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 中,提供对文件系统和操作系统的访问。因此,这种组合本质上允许您使用 Angular 构建多平台桌面 Web 应用程序。强大的东西。

这是 AIR 有一个自定义地址栏字符串的问题,它看起来像app:/而不是http://. 所以它有一个斜线而不是两个。Angular 使用地址栏位置来路由应用程序,即http://something.com/#/contactList加载contactList视图及其关联的控制器。我对正则表达式的了解非常(非常)有限,因此我无法阅读上面包含的模式,但我猜测一个斜线而不是两个或类似的东西可能是问题所在。

我的目标是调整模式,app:/使其成为有效模式,我希望 URI 段制作和相关操作仍然有效。

4

2 回答 2

1

请参阅 Mozilla 正则表达式文档:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

@shaunhusain 已经在评论中解释的内容大部分是正确的,但以下内容除外:

  • \w匹配单个字母数字字符或下划线
  • + 匹配前一个字符的 1 个或多个(不是 0 或 1)

因此,\w+匹配长度为 1 个或多个字符的单词。

如果您想匹配类似app:/.

于 2013-07-16T01:24:07.593 回答
0

马克的回答是正确的,这是更改后的 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:/ 上匹配 angular,就像 http:// 一样,这样它就可以作为 Air 应用程序运行。

于 2013-07-16T16:29:17.417 回答