Javascript正则的捕获组和非捕获组问题

rangeon 2015-10-05 09:34:42
正在看《Javascript语言精粹》,看到正则部分了,对于捕获组和非捕获组有点疑问。既然是非捕获组,应该不捕获才对,书中url解析的例子为什么还是捕获到了,而且能输出。


var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;

var url = "http://www.ora.com:80/goodparts?q#fragment";

var result = parse_url.exec(url);

var names = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'];

var blanks = ' ';
var i;

for (i = 0; i < names.length; i += 1) {
document.writeln(names[i] + ':' + blanks.substring(names[i].length), result[i]);
}


既然“http”的组为非捕获组,应该不能输出才对啊?!求高手解惑。
...全文
341 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rangeon 2015-10-05
  • 打赏
  • 举报
回复
非常感谢回答!这意思是非捕获组中可以嵌入捕获组? 真有点绕人。
xuzuning 2015-10-05
  • 打赏
  • 举报
回复
输出 url: http://www.ora.com:80/goodparts?q#fragment scheme: http slash: // host: www.ora.com port: 80 path: goodparts query: q hash: fragment 这是正确的! (?:([A-Za-z]+):) http: 属于非捕获组 (?:([A-Za-z]+):) 但其中的 http 属于捕获组 ([A-Za-z]+) 请注意区别他们的关系

87,899

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧