Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多行字符串中任意数量的捕获组_Javascript_Regex_Capture Group - Fatal编程技术网

Javascript 多行字符串中任意数量的捕获组

Javascript 多行字符串中任意数量的捕获组,javascript,regex,capture-group,Javascript,Regex,Capture Group,我有一个很长的标记格式字符串,它由一个或多个标题的重复部分和多行描述组成,如下所示: **[Title1](link1) brief description** flag1, flag2 commentary, occasionally multi-line --- **[Title2](link2) brief description** flag3, flag4 **[Title3](link3) brief description** flag5, flag6, flag7 commen

我有一个很长的标记格式字符串,它由一个或多个标题的重复部分和多行描述组成,如下所示:

**[Title1](link1) brief description** flag1, flag2
commentary,
occasionally multi-line
---

**[Title2](link2) brief description** flag3, flag4
**[Title3](link3) brief description** flag5, flag6, flag7
commentary
---

...
此顺序偶尔会与其他文本中断,这些文本交织在
--
和下一个标题之间

我希望用JS的正则表达式处理它,以便在单独的捕获组中捕获标题、链接、描述和评论。理想情况下,从给出的示例中,我希望得到如下结果:

1st match:
    group 1: Title1
    group 2: link1
    group 3: brief description
    group 4: commentary,
             occasionally multi-line

2nd match:
    group 1: Title2
    group 2: link2
    group 3: brief description 2
    group 4: Title3
    group 5: link3
    group 6: brief description 3
    group 7: commentary

 ...
我不想撒谎-我的正则表达式技能需要一些改进,但是我设法解决了这个问题,将其限制为单个标题(使用类似于
/\*\*\\[(.*\]\(.*\)\s+(.*\*\*.*.*.*.\s+(?:.*\s)*?-/g
)。由于数量不确定,我不确定如何将单独的片段收集到简洁的组中,因为无论我如何尝试,我要么为属于一个项目的标题获得单独的匹配,要么第二个和后续的标题与注释混在一起


这只适用于正则表达式吗?我希望避免按项目边界分割(
**[
--
,在本例中)并从那里进一步分割,因为这似乎不如单个正则表达式匹配优雅。

您试图重复一个捕获组,然后访问所有捕获。不幸的是,这在JavaScript正则表达式引擎中不起作用(其他大多数情况也是如此。).NET引擎确实支持它

我知道您不想先拆分,但这可能是最好的选择。如果您可以使用JS中的.NET正则表达式引擎或将项目更改为使用.NET/Powershell,那么您可能可以使用纯正则表达式

参考文献
我想我是用一个正则表达式得到的

var re = /(?:\*\*\[(.*)\]\((.+)\) (.+)\*\* .*\n)(?:([^\*(?:\-\-\)]+))?/g;
我不确定这是否是您要求的,但它与您的输入和输出相匹配。 你可以

在这里,您可以找到一个使用该正则表达式并显示捕获的组的

当然,它不是很严格,所以你可以改变它,以满足你的需要


我希望这是您想要的。

预期的捕获是什么?非常感谢示例。我不确定JS中的正则表达式单词如何匹配,但在PHP中,点(.)不会匹配新行。有一个修饰符,如“/match/s”这就说明了。要匹配所有内容。由于您使用的是点,我假设这些点不会匹配新行。@pushpraj预期的捕获在原始帖子的第二个
code
块中提供。也许我应该使用捕获而不是组。如果这不是您的意思,请告诉我。@KohjahBreese是的,但是
\s
does。给出的正则表达式是针对问题限制为每个项目一个标题的情况。我不确定当存在多个标题时如何进行匹配和捕获。我无法测试此ATM,但从这一部分:***\s+----The.*将匹配任何内容,包括一个空格。如果添加一个?使其匹配:***\s+它将匹配任何内容(或不匹配任何内容)最多\s。我建议,可以使用类似[^\s]*如果可能的话。点可能会导致问题。问题是,例如,我希望它只有两个匹配,捕获数量可变,因为这将简化进一步的处理-每个匹配将对应于一个项目,这样我就可以在一个while循环中利用
exec()实现我想要的一切
。从现在起,我必须权衡我的选择,并决定测试捕获计数匹配是否更可取,还是我应该将其拆分并从那里进行黑客攻击。谢谢!如果只是以组织方式困扰您,您可以在自定义数组或while循环中的对象中重新组织匹配。但我不能完全确定是否要取消理解你试图避免的东西;)我只是希望尽可能简洁优雅。处理匹配始终是一种可能,但如果可以从一个正则表达式获取所有信息,我希望避免这种可能性。我现在知道它不是。信息在那里,但格式不是你想要的;)祝你继续好运!我明白了。糟糕,这是客户端在web应用程序中。拆分并处理它,然后。谢谢!