Javascript中的RegEx match()未按预期生成结果

Javascript中的RegEx match()未按预期生成结果,javascript,regex,Javascript,Regex,我很难理解为什么Javascript中的正则表达式不能像我期望的那样工作 模式如下: \[(.+)\]\((.+)\) 正在尝试以以下格式匹配文本: [Learn more](https://www.example.com) const text='Lorem ipsum等[了解更多信息](https://www.google.com),并产生昂贵的[测试链接](https://www.google.com). [另一个测试链接](https://www.google.com).' 常量正

我很难理解为什么Javascript中的正则表达式不能像我期望的那样工作

模式如下:

\[(.+)\]\((.+)\)
正在尝试以以下格式匹配文本:

[Learn more](https://www.example.com)
const text='Lorem ipsum等[了解更多信息](https://www.google.com),并产生昂贵的[测试链接](https://www.google.com). [另一个测试链接](https://www.google.com).'
常量正则表达式=/\[(.+)\]\(.+)\)/
const found=text.match(正则表达式)

console.log(find)
量词是贪婪的,将“吃掉”尽可能多的源字符串。您可以改为使用
+?

const regex = /\[(.+?)\]\((.+?)\)/
更好的做法是,不要使用
匹配“not]”:


明确排除边界字符可以更好地执行任何操作。

TL;DR:正则表达式
\[(.+?)\]\((.+?)\)
应该可以

原始模式不起作用的原因是
+
量词在默认情况下是“贪婪的”,它将尝试匹配尽可能多的字符。因此,
+
表示“尽可能多地使用除新行字符以外的任何字符”。您已经可以看出,右括号正好符合定义


为了使它正常工作,你必须说“尽可能多的事情,直到第一个结束括号。”要做到这一点,你要么用
[^\]+
替换
+
[^\]]+
用于第二组),要么简单地用
附加上述量词,使其不那么贪婪,这将两个捕获组转换为
(.+?)

regex=/\[(.+?)\]\((.+?)\)\]\((.+?)\)/g
使其非贪婪并使用globalIf如果您正在编写一个标记解析器,则可以安装一些库来完成这项工作,而无需重新发明轮子。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@博纳蒂我应该指出,原来的帖子没有直接的问题要回答。
const regex = /\[([^\]]+)\]\(([^)]+)\)/