首页 > 解决方案 > 正则表达式捕获超链接

问题描述

我有一个正则表达式:

/(\b(((?<alias>.*)\s*:\s*)){0,1}(?<link>(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]))/ig;

现在,我正在尝试匹配文本 - Instructions: http://google.com microsoft: http://microsoft.com,使用上面的正则表达式,这样Instructions: http://google.com应该匹配 1 和microsoft : http://microsoft.com应该匹配 2。

Instructionsmicrosoft应作为别名捕获。但它不起作用并且匹配整个字符串说明: http: //google.com microsoft:http ://microsoft.com as match 1。

在此处查看示例。

标签: javascriptregex

解决方案


使用 2 个命名组,一个选项可能是

\b(?<alias>[^\s:]+):\s*(?<link>(?:https?|ftp|file):\/\/\S+)

模式匹配:

  • \b一个词的边界
  • (?<alias>[^\s:]+)组别
  • :\s*匹配:和可选的空白字符
  • (?<link>捕获组链接
    • (?:https?|ftp|file):\/\/匹配任何备选方案和://
    • \S+匹配 1+ 个非空白字符
  • )关闭群组链接

正则表达式演示


推荐阅读