Я пытаюсь разбить строку, если символ 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, чтобы я мог сопоставить это через объект, который вернет его в порядке
И должен ли '111111' стать ['11', '11', '11], или ['11, '1', '11', '1'], или ['1', '1', '1', '11', '1'], или ...?
Или что в этом такого?
@ScottSauyet ['11', '11', '11'] т.е. пять единиц дадут '11111' -> ['1', '11', '11']
А как насчет 2 ??
@sin Число 2 просто помещается в массив как "2" ... дубликаты не имеют значения
Как следует разбить 1111? 1, 1, 11?
@sin ["11", "11"]
Совершенно непонятно, какой алгоритм разделения вам нужен.
@ jfriend00 - Вы зациклились на слове расколоть? split абсолютно бесполезен, я уверен, изобретен еще во времена bsd.
@sln - Нет. Я просто не понял, какой алгоритм нужен для создания вывода. Для меня это был непонятный вопрос. Я использовал разделение как общий термин.
@ jfriend00 - я бы сказал, что для JS регулярное выражение урезано (пока). На любом языке расколоть почти никогда не подходит, за исключением простейшей логики одного направления. Такой простоты никогда не бывает, когда кто-то хочет сопоставить сложность.
@sln - я использовал фразу split в общем смысле в том смысле, что OP попросил разделить вывод одной строки на несколько строк. См. Dictionary.com/browse/split?s=t, если вы не уверены в этом. Первое определение: «разделять или разделять из конца в конец или на слои». Четвертое определение: «разделить на отдельные части или порции». Я просто нашел вопрос неясным (как и другие, судя по отрицательным голосам по этому вопросу).
@ jfriend00 - Да, я это вижу. Я не наказываю за неправильную формулировку вопроса на 100%. Черт, они и так достаточно нервничают. Ошибки Концептуальный меня понимают, я в этом не разбираюсь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Придумал вот это.
(?: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"]?
@ScottSauyet - Конечно можно. (?:1(?:(?=(?:11)*(?!1)))|11|2)regex101.com/r/TkHOWP/1
Очень хорошо! Я делал это без регулярного выражения, и это оказалось некрасиво!
Вы хотите
1, а затем11? Почему вам не нужен11, а затем1?? Может быть, вы не знаете, чего хотите.