Regex用于匹配降价中的主题中断



我正在尝试制作一个RegEx,它匹配字符串中的所有主题中断,以便在JavaScript的String.split函数中使用。

专题休息可以是:

  • 连字符:---
  • 星号:***
  • 下划线:___

连字符、星号或下划线之间可以有空格,但不能混用,例如这不是有效的--*

完整规格:https://spec.commonmark.org/0.30/#thematic-破坏

以下是我尝试过的:/[-*_]{3,}/g,但它与中间有空白的不匹配,如果我在其中添加一个空格,它将与--之类的东西匹配,这是不可取的。我也想过先把空白分条,但我想把它全部放入RegEx中。

这可能吗?如何?

您可以使用以下正则表达式:

/^[ ]{0,3}([-*_])s*1s*1+s*$/gm

解释

^-线路的匹配开始

[ ]{0,3}-匹配可选最多3个空格

([-*_])-匹配-*_,并将其放入组

s*1s*1+s*-匹配可选空白和第一组字符两次

$-匹配线路末端

编辑(来自评论(:

/^[ ]{0,3}([-*_])s*(?:1s*){2,}$/gm

现在,只要使用的字符相同,它就支持重复模式。

此组:

CCD_ 16被重复2次或更多次。

匹配示例:

***
- - -                   
__            _
** * ** * ** * **

不匹配示例:

*-_
abc
+++

我应该补充一点,我使用s,尽管规范上写着"空格或制表符"。由于必须逐行解析,因此s应该是安全的。

您可以在此处测试正则表达式。

最新更新