z JavaScript regex中的PCRE等效项,以匹配所有降价列表项 [英] z PCRE equivalent in JavaScript regex to match all markdown list items

查看:30
本文介绍了z JavaScript regex中的PCRE等效项,以匹配所有降价列表项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将Markdown样式列表解析为HTML。为此,我使用了几个正则表达式,所有这些都符合JavaScript标准。我知道有几种不同的工具可以做到这一点,但我认为这将是练习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等效项,以匹配所有降价列表项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆