我正在尝试创建一个与 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,它不支持负向后查找。有什么建议吗?
最佳答案
有两个问题。
- 此
\[.*?\]
将超越]
并匹配[应忽略的链接](http://google.com/) lorem ipsum lorem ips sum loreerm [不应被忽略的链接]
只是这样它会匹配断言。 - 断言是无限的。
您可以使用此正则表达式修复 1 和 2
((!?\[[^\]]*?\])\((?:(?!http|www\.|\#|\.com|\.net|\.info |\.org).)*?\))
( # (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/