Javascript多行regex先行或字符串的其余部分/字符串的最后一部分

Javascript multiline regex lookahead OR the rest of string / very end of string

本文关键字:字符串 余部 最后 一部分 多行 Javascript regex      更新时间:2023-09-26

我在捕获以下标记文本中的所有组时遇到问题:

### AAA
text for group AAA
### BBB
text for group BBB
### CCC
text for group CCC

我目前使用的正则表达式是:

/(^###'s['s'S]*?(?=^###'s))/gm

它使用积极的前瞻性来知道何时切断每组。因此,它总是无法捕捉到最后一组(没有前瞻性比赛)。

换行符不一致,所以我不能依赖它们,并且javascript regex没有''Z(我认为在其他语言中这是"字符串的末尾",而$是行的末尾)。

如何在此处捕获所有组?

您可以使用负向前看而不是正向前看:组的内容将是不在###字符串开头的每个字符。

^###'s((?!###)['s'S])*

在regex101上试试吧!

查看JS是否具有'z构造
如果没有,您可以使用而不是字符的前瞻(EOS)
(?!['S's])

(^###[^'S'r'n]['S's]*?(?=^###[^'S'r'n]|(?!['S's])))

格式化:

 (                             # (1 start)
      ^ '#'#'# [^'S'r'n] 
      ['S's]*? 
      (?=
           ^ '#'#'# [^'S'r'n]  
        |  (?! ['S's] )
      )
 )                             # (1 end)