Мне нужно сломать строку:

  • разрыв на одном из этих трех символов: _ $ *
  • Держите разделитель в начале линии

Примеры:

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 не включен)

Я пробовал добавить ^.*?(?=[_\*\$]) для первой части, но тогда части, начинающиеся с * _ $, не выбираются.

Скрипка

2
Michel 12 Мар 2018 в 11:02

1 ответ

Лучший ответ

Вы могли бы использовать позитивный вид с нужными персонажами для расщепления.

var string = '$Hello,_have a beer,$or a sandwich.*Bye_ ',
    splitted = string.split(/(?=[$_*])/);
    
console.log(splitted);
1
Nina Scholz 12 Мар 2018 в 11:05