用于以纯格式和降价检测 url 的正则表达式

Regex for detecting url in plain form and in markdown

我正在尝试在文本区域中捕获用户输入,该文本区域可能是三种格式中的任何一种 url(以及类似的电子邮件)-

  1. Just plain url.
  2. Markdown with title [text](url "title")
  3. Markdown without title [text](url)

现在,我有一个正则表达式 (javascript) 可以用于三种独立的格式中的每一种。但是如果我想做所有 3 个,第一个会阻止第二个和第三个激活。在我的代码中,在 'space' 上触发正则表达式检测。因此,如果我有第一个正则表达式,那么永远不会触发带有降价标题的正则表达式。

我想知道是否可以为第一个正则表达式专门排除第二个和第三个格式?或者,更好的是,如果有一个匹配所有 3 个的用于捕获的正则表达式?

此外,由于我不太擅长 Regex,如果有人也可以解释他们的解决方案 Regex,我会很高兴,这样我就可以尝试对电子邮件检测做同样的事情。

谢谢!

首先是第二个正则表达式already works for the third format,所以我们只需要加入第一个和第二个即可。

执行此操作的简单方法是使用 | ("OR") 字符,如下所示:

(<firstRegex>)|(<secondRegex>)

Demo

问题在于它会扰乱捕获组。如果正则表达式捕捉到第一个模式,url 将处于不同的捕捉组(在我的演示中是第 4 个),而不是被第二个模式(第 2 组)捕捉到。

在普通 URL 正则表达式

上排除降价模式

(?:^|[^\(\/]) 添加到普通 URL 模式的开头将强制正则表达式匹配任何不是左括号的字符,从而排除降价情况。 url 必须使用捕获组提取,因为该字符将包含在匹配项中。

Demo