Я пытаюсь написать регулярное выражение для использования в функции split()
для разделения строки, следуя этим правилам:
- Если найдено
\
, чем разделениепроизводится перед символом \
и после символа после знака после \
(например, "Hel\\7o".split()
→ ["Hel", "\7", "o"]
; - Если найден
%
, у нас аналогичное поведение, но япринимать только буквы. (например, "He%7l%lo".split()
→ ["He%7l", "%l", "o"]
; - Если между
""
или ''
есть какая-то строка, они разделяются (например, "Hel\"lo\"".split()
→ ["Hel", ""lo""]
; - Если найден
, или :
, или /
, мы разделяемся (например, "Hel/lo Wor:ld".split()
→ ["Hel", "/", "lo", " ", "Wor", ":", "ld"]
;
Я достиг того, что есть я 'Мы уже говорили с этим следующим регулярным выражением: /(\\.|%[a-zA-Z]|\".*\"|\'.*\'|:|\/| )/
.
Теперь мне нужно одно последнее правило разбиения, которое заключается в том, что мне нужно отделить вхождения в символы от вхождений другого в основном.У меня есть "mmDD"
, я хотел бы иметь ["mm", "DD"]
.
Конечно, до сих пор это должно работать со всеми другими правилами, поэтому "mm mmDDYYy%y"
вернет ["mm", " ", "mm", "DD", "YY", "y", "%y"]
.
В этом последнемпример вамтакже видно, что это последнее правило должно быть чувствительным к регистру ("YY"
отделяется от "y"
).
Я нашел этот ответ -> JavaScript Split string по нескольким вхождениям букв Но это не помогает мне, так как теряет количество вхождений (например, "mmDD".split(/(.)\1*/)
возвращает ["m","D"]
, но мне нужно ["mm","DD"]
.
Я пытался поиграть практически со всемиправила регулярных выражений, но я схожу с ума после этого.Возможно ли даже напрямую с помощью функции split()
?
Спасибо за помощь.
РЕДАКТИРОВАТЬ: Если это поможет, вот ссылка regex101 https://regex101.com/r/ezXKkG/1/
Кроме того, Wiktor Stribiżew предложил (?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[a-z]))
, который я добавил в глобальное правило следующим образом: /(\\.|%[a-zA-Z]|\".*\"|\'.*\'|:|\/| |(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[a-z]))/
.
При этом "MMmm"
делится на ["MM", "mm"]
(Ницца!),но это не работает в случае, как: "MMmdD"
, который разделен на ["MM", "md", "D"]