拆分字符串并使用以下文本保持分离器

Wal*_*ari 2 javascript regex arrays split

我有一长串文本,我希望通过字符串"#","##"和"###"拆分成一个数组.

我可以这样做:

const text = "### foo ## foo # foo ### foo ## foo ### foo ### foo ### foo"

text.split(/#{1,3}/g)
Run Code Online (Sandbox Code Playgroud)

输出:

 [ '',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo' ]
Run Code Online (Sandbox Code Playgroud)

然而,这删除了我仍然需要的主题标签.我也可以保留主题标签,但它们只是作为元素添加到数组中,这也是不可取的.

text.split(/(#{1,3})/g)
Run Code Online (Sandbox Code Playgroud)

输出:

[ '',   '###',   ' foo ',   '##',   ' foo ',   '#',   ' foo ', '###',   ' foo ',   '##',   ' foo ',   '###',   ' foo ',   '###',   ' foo ',   '###',   ' foo' ]
Run Code Online (Sandbox Code Playgroud)

如何拆分文本,以便在标签后的数组元素中包含主题标签之后的文本?所以结果就是这样.

通缉结果:

[ '### foo ',   '## foo ',   '# foo ',   '### foo ',   '## foo ',   '### foo ',   '### foo ',   '### foo' ]
Run Code Online (Sandbox Code Playgroud)

ctw*_*els 11

请参阅此处使用的正则表达式

#{1,3}[^#]+
Run Code Online (Sandbox Code Playgroud)

将上述正则表达式与JavaScript match()函数一起使用

var str = "### foo ## foo # foo ### foo ## foo ### foo ### foo ### foo";
var matches = str.match(/#{1,3}[^#]+/g);
console.log(matches)
Run Code Online (Sandbox Code Playgroud)


说明

  • #{1,3}#字面上匹配数字符号的1到3之间(或任何你想称之为符号的字符)
  • [^#]+ 匹配集合中不存在的任何字符中的1个或更多 #