gpt4 book ai didi

javascript - 尝试匹配 JavaScript 字符串上的所有正则表达式

转载 作者:行者123 更新时间:2023-11-30 08:19:18 26 4
gpt4 key购买 nike

我正在尝试 string.matchAll 以下字符串:

const text = 'textA [aaa](bbb) textB [ccc](ddd) textC'

我要匹配以下内容:

  • 第一个:“textA [aaa](bbb)”
  • 第二个:“textB [ccc](ddd)”
  • 第三:“textC”

注意:捕获组已存在于 regex 中。这就是我需要的。

它几乎可以工作,但到目前为止我想不出一种方法来匹配字符串的最后一部分,它只是 "textC",并且没有 [*](*) 模式。

我做错了什么?

const text = 'textA [aaa](bbb) textB [ccc](ddd) textC'
const regexp = /(.*?)\[(.+?)\]\((.+?)\)/g;

const array = Array.from(text.matchAll(regexp));
console.log(JSON.stringify(array[0][0]));
console.log(JSON.stringify(array[1][0]));
console.log(JSON.stringify(array[2][0]));

更新:

除了下面答案中提供的好的解决方案外,这也是一个选择:

const text= 'textA [aaa](bbb) textB [ccc](ddd) textC'

const regexp = /(?!$)([^[]*)(?:\[(.*?)\]\((.*?)\))?/gm;

const array = Array.from(text.matchAll(regexp));

console.log(array);

最佳答案

因为没有第三场比赛。在前两次匹配之后,字符串中唯一剩下的就是“text C”:

https://regex101.com/r/H9Kn0G/1/

要解决此问题,请将整个第二部分设为可选(还要注意开头的 \w 而不是 . 以防止该点吃掉整个字符串,以及“仅分组”括号用于包围可选部分,这使您的匹配组保持相同):

(\w+)(?:\s\[(.+?)\]\((.+?)\))?

https://regex101.com/r/Smo1y1/2/

关于javascript - 尝试匹配 JavaScript 字符串上的所有正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56637134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com