Разделить строку на двойные и одиночные появления числа 1

Я пытаюсь разбить строку, если символ 1 встречается дважды или один раз. Кроме того, я использую только 1 и 2. Кроме того, порядок должен зависеть от следующего примера:

var str = "111221";

Я хочу strArr = ["1", "11", "2", "2", "1"];

str.match (/ 1 {2} | 2 | 1 {1} / g) вернет ['11', '1', '2', '2', '1']. Однако это не в правильном порядке. т. е. 5 единиц 1, 11111 -> [1, 11, 11] и 6 единиц 111111 -> [11, 11, 11].

Вы хотите 1, а затем 11? Почему вам не нужен 11, а затем 1 ?? Может быть, вы не знаете, чего хотите.

user557597 15.04.2018 20:22

Я хочу, чтобы это было заказано 1, а затем 11, чтобы я мог сопоставить это через объект, который вернет его в порядке

user10109 15.04.2018 20:24

И должен ли '111111' стать ['11', '11', '11], или ['11, '1', '11', '1'], или ['1', '1', '1', '11', '1'], или ...?

Scott Sauyet 15.04.2018 20:25

Или что в этом такого?

user557597 15.04.2018 20:26

@ScottSauyet ['11', '11', '11'] т.е. пять единиц дадут '11111' -> ['1', '11', '11']

user10109 15.04.2018 20:28

А как насчет 2 ??

user557597 15.04.2018 20:29

@sin Число 2 просто помещается в массив как "2" ... дубликаты не имеют значения

user10109 15.04.2018 20:36

Как следует разбить 1111? 1, 1, 11?

user557597 15.04.2018 20:44

@sin ["11", "11"]

user10109 15.04.2018 20:45

Совершенно непонятно, какой алгоритм разделения вам нужен.

jfriend00 15.04.2018 21:02

@ jfriend00 - Вы зациклились на слове расколоть? split абсолютно бесполезен, я уверен, изобретен еще во времена bsd.

user557597 16.04.2018 01:20

@sln - Нет. Я просто не понял, какой алгоритм нужен для создания вывода. Для меня это был непонятный вопрос. Я использовал разделение как общий термин.

jfriend00 16.04.2018 01:39

@ jfriend00 - я бы сказал, что для JS регулярное выражение урезано (пока). На любом языке расколоть почти никогда не подходит, за исключением простейшей логики одного направления. Такой простоты никогда не бывает, когда кто-то хочет сопоставить сложность.

user557597 16.04.2018 01:44

@sln - я использовал фразу split в общем смысле в том смысле, что OP попросил разделить вывод одной строки на несколько строк. См. Dictionary.com/browse/split?s=t, если вы не уверены в этом. Первое определение: «разделять или разделять из конца в конец или на слои». Четвертое определение: «разделить на отдельные части или порции». Я просто нашел вопрос неясным (как и другие, судя по отрицательным голосам по этому вопросу).

jfriend00 16.04.2018 01:51

@ jfriend00 - Да, я это вижу. Я не наказываю за неправильную формулировку вопроса на 100%. Черт, они и так достаточно нервничают. Ошибки Концептуальный меня понимают, я в этом не разбираюсь.

user557597 16.04.2018 02:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
15
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Придумал вот это.

(?:1(?=(?:11)*(?!1))|11|2)

По сути, он просто получает первый странный 1, а затем получает эвены.

https://regex101.com/r/UtbhsV/1

Объяснил

 (?:
      1                   # First, try 1
      (?=                 # Must be followed by even amount of 1's
           (?: 11 )*
           (?! 1 )
      )
   |  11                  # Or, only even's left, just get 11
   |  2                   # Or, How about a  2 ?
 )

Можете ли вы использовать это для преобразования "111221" в ["1","11", "2" ,"2", "1"]?

Scott Sauyet 15.04.2018 21:00

@ScottSauyet - Конечно можно. (?:1(?:(?=(?:11)*(?!1)))|11|2)regex101.com/r/TkHOWP/1

user557597 15.04.2018 21:06

Очень хорошо! Я делал это без регулярного выражения, и это оказалось некрасиво!

Scott Sauyet 15.04.2018 21:09

Другие вопросы по теме