用正则表达式拆分字符串,在行的开头保留分隔符

时间:2018-03-12 08:02:07

标签: javascript regex

我需要打破一个字符串:

  • 打破以下三个字符之一: _ $ *
  • 将分隔符保留在行的开头

示例:

Hello,_have a beer_or a sandwich.$Bye  =>  Hello,
                                           _have a beer
                                           _or a sandwich.
                                           *Bye

$Hello,_have a beer,$or a sandwich.*Bye  => $Hello,
                                           _have a beer,
                                           $or a sandwich.
                                           *Bye

我想出了这个正则表达式:

/_.*?(?=[_\*\$])|\*.*?(?=[_\*\$])|\$.*?(?=[_\*\$])/g

问题是:

  1. 当该部分没有被捕获时,它不会捕获字符串的第一部分 从* _ $开始。 (在第一个示例中,不包括Hello。)
  2. 它不捕获字符串的最后一部分,因为下一个
    字符不是* _ $。 (在两个示例中均未包含*Bye
  3. 我已尝试为第一部分添加^.*?(?=[_\*\$]),但随后以* _ $开头的部分不会被选中。

    A fiddle

1 个答案:

答案 0 :(得分:1)

你可以使用带有所需字符的正lookeahead进行拆分。



var string = '$Hello,_have a beer,$or a sandwich.*Bye_ ',
    splitted = string.split(/(?=[$_*])/);
    
console.log(splitted);