z PCRE equivalent in JavaScript regex to match all markdown list items(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等效项,以匹配所有降价列表项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:z JavaScript regex中的PCRE等效项,以匹配所有降价列表项


- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Fetch API 如何获取响应体? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01