z JavaScript regex中的PCRE等效项,以匹配所有降价列表项

本教程将介绍z JavaScript regex中的PCRE等效项,以匹配所有降价列表项的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

z JavaScript regex中的PCRE等效项,以匹配所有降价列表项 教程 第1张

问题描述

我正在尝试将Markdown样式列表解析为HTML。为此,我使用了几个正则表达式,所有这些都符合标准。我知道有几种不同的工具可以做到这一点,但我认为这将是练习RegEx的一个好方法。然而,我遇到了一个问题。

检索包含有序列表和无序列表的列表"挡路"后,我需要将挡路解析为不同的列表项。这些项目可能被缩进,因此分布在多行中,如下所示:

1. text
2. text
  1. text
  2. text
* text
* text
  - text
  + text
1. text
  * text
  1. text
* text
  1. text
  * text

我创建此RegEx是为了分离不同的列表元素,并包括元素的子列表标记。

/^(?:d.|[*+-]) [^]*?(?=^(?:d.|[*+-]))/gm

哪些应实现这些匹配.

What I am trying to acheive

1. text

2. text
  1. text
  2. text

* text

* text
  - text
  + text

1. text
  * text
  1. text

* text
  1. text
  * text

但是,这会分离出除最后一个元素之外的所有列表元素,因为我使用的是正向前瞻,以便只匹配后面跟着另一个列表元素的列表元素。其结果是.

What actually happens when using this RegEx

1. text

2. text
  1. text
  2. text

* text

* text
  - text
  + text

1. text
  * text
  1. text

如您所见,最后一个列表元素丢失。

我的想法是只匹配后跟另一个列表元素的列表元素匹配后跟字符串结尾的列表元素,如下所示。

/^(?:d.|[*+-]) [^]*?(?=^(?:d.|[*+-])|$)/gm

这不起作用,因为我使用的是多行标志。我也无法使用/Z,因为我正在使用JavaScript。

有什么人知道用撞击解决这个问题的另一种方法?
Regex101: see this page for the example

推荐答案

如果希望匹配具有m标志的JavaScript regex中的字符串位置,可以使用$(?![^])$(?![sS])LIKE模式。您的图案将如下所示

/^(?:d.|[*+-]) [^]*?(?=^(?:d.|[*+-])|$(?![^]))/gm
^^^^^^^^ 

请参阅regex demo。$(?![^])(或$(?![sS]))匹配紧随其后没有其他字符的行的末尾(因此,字符串的末尾)。

但是,您应该考虑展开惰点部分以使模式更有效地工作。

举个例子:

/^(?:d+.|[*+-]) .*(?:?
(?!(?:d+.|[*+-]) ).*)*/gm

请参阅regex demo

详细信息

    ^-行首

    (?:d+.|[*+-])-1+数字加一个点或a*/+/-

    -空格

    .*-除换行符之外的任何0+字符都要尽可能多

    (?:?
    (?!(?:d+.|[*+-]) ).*)*
    -0个或多个CRLF或LF行序列,后跟-1+数字和圆点,或*/+/-后跟空格,然后是该行的睡觉。

好了关于z JavaScript regex中的PCRE等效项,以匹配所有降价列表项的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。