返回子字符串匹配vimscript

Jea*_*ado 2 vim

我想使用带有正则表达式的vimscript提取markdown链接的url.

理想情况下,这些方面的内容:

fun! GetLinkUri(str)
    return match(a:str, '[.*]\((.*)\)', \1)
endfunc
Run Code Online (Sandbox Code Playgroud)

所以给出一个字符串:The search engine [Google](https://google.com) blabla 它会返回https://google.com.

描述函数的方式不是匹配的正确使用.有什么方法可以匹配吗?还有其他功能可以完成这项工作吗?

DJM*_*hem 5

您将需要使用matchstr而不是match.但这不是你唯一的问题.我会这样做:

return matchstr(a:str, '\[.*\](\zs.*\ze)')
Run Code Online (Sandbox Code Playgroud)
  1. [.*]意味着匹配一个字符,即a '.'或a '*'.如果要匹配文字方括号,则需要转义方括号.

  2. 不幸的是,matchstr不能返回一个单独的子组,所以我使用\zs\ze限制匹配部分到括号之间的内容.