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

时间:2017-11-06 16:06:40

标签: javascript arrays regex split

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

我可以这样做:

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

text.split(/#{1,3}/g)

输出:

 [ '',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo ',
          ' foo' ]

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

text.split(/(#{1,3})/g)

输出:

[ '',   '###',   ' foo ',   '##',   ' foo ',   '#',   ' foo ', '###',   ' foo ',   '##',   ' foo ',   '###',   ' foo ',   '###',   ' foo ',   '###',   ' foo' ]

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

通缉结果:

[ '### foo ',   '## foo ',   '# foo ',   '### foo ',   '## foo ',   '### foo ',   '### foo ',   '### foo' ]

1 个答案:

答案 0 :(得分:11)

代码

See regex in use here

#{1,3}[^#]+

将上述正则表达式与JavaScript match()函数

一起使用

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

说明

  • #{1,3}在数字符号的1到3之间匹配(或者您想要称之为符号的任何内容)#字符
  • [^#]+匹配集#
  • 中不存在的任何字符中的1个或多个