Я хотел бы разделить строку ввода на первом двоеточие, у которого по-прежнему есть символы после него в той же строке.
Для этого я использую регулярное выражение /:(.+)/
Таким образом, строка
aaa:
bbb:ccc
Я ожидаю вывод
["aaa:\nbbb", "ccc"]
И учитывая строку
aaa:bbb:ccc
Я ожидаю вывод
["aaa", "bbb:ccc"]
Но когда я действительно запускаю эти команды, я получаю
["aaa:\nbbb", "ccc", ""]
["aaa", "bbb:ccc", ""]
Как вывод.
Итак, как-то javascript добавляет пустую строку в конец массива.
Я проверил документацию для String.split
и в то же время упоминает, что если вы выполняете String.split
в пустой строке с указанный разделитель, вы получите массив с 1 пустой строкой в нем (а не пустой массив). Он не упоминает о том, что всегда всегда есть пустая строка на выходе или предупреждение о том, что вы можете получить этот результат, если вы совершаете распространенную ошибку или что-то в этом роде.
Я бы понял, была ли в моей строке ввода двоеточие в конце или что-то в этом роде; то он разбивается на двоеточие, а остальная часть матча - пустая строка. Это проблема, упомянутая в Разделение строки с регулярным выражением, чтобы сделать ее массивом без пустого элемента - но у меня нет этой проблемы, так как моя строка ввода не заканчивается моим сепаратор.
Я знаю, что быстрым решением в моем случае будет просто ограничение количества совпадений, через "aaa:bbb:ccc".split(/:(.+)/, 2)
, но мне все же интересно:
Почему этот вызов String.split
возвращает массив, заканчивающийся пустой строкой?