javascript - 正则表达式匹配本地 Markdown 链接

标签 javascript regex

我正在尝试创建一个与 markdown url 匹配的正则表达式,但忽略它之前和之后的内容。它应该只匹配指向本地文件的本地 Markdown url,并忽略指向外部网站的 URL。示例:

"dddd [不应忽略的链接](http://google.com/) lorem ipsum lorem ips sum loreerm [不应忽略的链接](../../../filepath/folder/some-other-folder/another-folder/one-last-folder/file-example.html). lorem ipsum lorem"

应该只匹配第二个链接。目前,它匹配一切。我的正则表达式可以满足我的需要,但这似乎是我发现的主要边缘情况。

到目前为止我所拥有的:

/(!?\[.*?\]\((?!.*?http)(?!.*?www\.)(?!.*?#)(?!.* ?\.com)(?!.*?\.net)(?!.*?\.info)(?!.*?\.org).*?\))/g

目前,如果第二个链接不在第一个链接之后,则它会忽略第一个链接并匹配第二个链接。否则,它将匹配从第一个到第二个的所有内容。

我使用的是 JavaScript,它不支持负向后查找。有什么建议吗?

最佳答案

有两个问题。

  1. \[.*?\] 将超越 ] 并匹配 [应忽略的链接](http://google.com/) lorem ipsum lorem ips sum loreerm [不应被忽略的链接] 只是这样它会匹配断言。
  2. 断言是无限的。

您可以使用此正则表达式修复 1 和 2

((!?\[[^\]]*?\])\((?:(?!http|www\.|\#|\.com|\.net|\.info |\.org).)*?\))

Expanded

 (                             # (1 start)
      ( !?\[ [^\]]*? \] )           # (2), Link
      \(                            # Open paren (
      (?:                           # Cluster
           (?!                           # Not any of these
                http
             |  www\.
             |  \# 
             |  \.com 
             |  \.net 
             |  \.info 
             |  \.org 
           )
           .                             # Ok, grab this character 
      )*?                           # End cluster, do 0 to many times
      \)                            # Close paren )
 )                             # (1 end)

指标

----------------------------------
 * Format Metrics
----------------------------------
Cluster Groups      =   1

Capture Groups      =   2

Assertions          =   1
       ( ? !        =   1

Free Comments       =   7
Character Classes   =   1

关于javascript - 正则表达式匹配本地 Markdown 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511043/

相关文章:

javascript - 从外部文件更改对象

python - 在正则表达式 python 中更改行

javascript - 正则表达式只接受数字和特定字符

javascript - 我如何向 jquery 事件添加函数

c# - 匹配进程参数的正则表达式

Python 正则表达式匹配带或不带逗号或小数的货币

ruby - 如何从 Ruby 正则表达式中提取可变数量的子匹配项?

javascript - 从 FunctionFile 中删除漫游设置时出现 Outlook 加载项问题

javascript - 样式单选按钮,只显示选中

javascript - 为什么谷歌地图不显示在动态生成的 div 中?