gpt4 book ai didi

javascript - 我怎样才能用我的正则表达式捕获一个可选的星号?

转载 作者:行者123 更新时间:2023-11-29 23:16:24 25 4
gpt4 key购买 nike

我正在尝试从 markdown 中的 API 获取部分,所以我正在使用它: (?<=\*\*(Test)\*\*)(.*?)(?=\*\*end\*\*) https://regex101.com/r/r8aiVk/1这里的结果应该是 Test然后 this is a test ,它是。太棒了。

这工作正常,但是,有些标题末尾有星号,这是我遇到问题的地方。我用一个正则表达式遍历标题,但我想捕获那个可选的星号。

所以在下面的这个例子中,我希望能够连同其他部分一起捕获星号: https://regex101.com/r/r8aiVk/2这里的结果应该是Test* this is a test .

我尝试过各种不同的方式,比如 (\*?)和其他一些变体,但我无法让它工作。

最佳答案

JavaScript 中的后视实现欺骗了您:为了匹配后视模式,正则表达式迭代器向后移动,并尝试以这种方式匹配它的模式。因为它是在每个位置执行的(你的 lookbehind 是正则表达式中的第一个原子),它检查字符串的开头,然后是 *,然后是 **,然后是 T 等,一旦它匹配 **Test**,它就结束了。因此,下一个 *.*? 消费。

您可以使用单纯的消费模式获得您需要的东西:

/\*\*(Test\*?)\*\*(.*?)\*\*end\*\*/g

参见 regex demo .

这个pattern会被正常处理,从左到右,匹配

  • \*\* - ** 子串
  • (Test\*?) - 将 TestTest* 捕获到第 1 组
  • \*\* - ** 子串
  • (.*?) - 捕获第 2 组:除换行符以外的任何 0+ 个字符,尽可能少
  • \*\*end\*\* - **end** 子字符串。

关于javascript - 我怎样才能用我的正则表达式捕获一个可选的星号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52628360/

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