Как разделить строку с несколькими разделителями в JavaScript? Я пытаюсь разделить запятые и пробелы, но, AFAIK, функция разделения JS поддерживает только один разделитель.
javascript
regex
split
mikemaccana
источник
источник
Ответы:
Передайте регулярное выражение в качестве параметра:
Отредактировано, чтобы добавить:
Вы можете получить последний элемент, выбрав длину массива минус 1:
... и если шаблон не совпадает:
источник
(hello world)|\|
которые еще не совсем работали. Любые идеи?Вы можете передать регулярное выражение в оператор разделения Javascript . Например:
Или, если вы хотите, чтобы несколько разделителей вместе действовали как один:
(Вы должны использовать не захватывающие (? :) парены, потому что в противном случае они возвращаются в результат. Или вы можете быть умным, как Аарон, и использовать класс персонажей.)
(Примеры проверены в Safari + FF)
источник
|
как показывает Джесси.Другой простой, но эффективный метод - использовать split + join несколько раз.
По сути, выполнение разделения с последующим объединением похоже на глобальную замену, поэтому каждый разделитель заменяется запятой, а после замены всех элементов выполняется окончательное разделение на запятую.
Результатом вышеприведенного выражения является:
Расширяя это, вы также можете поместить его в функцию:
Применение:
Если вы часто используете эту функциональность, то
String.prototype.split
для удобства может даже стоить рассмотреть перенос (я думаю, что моя функция достаточно безопасна - единственное соображение - это дополнительные издержки условных (второстепенных) и тот факт, что в ней отсутствует реализация аргумента limit если массив передан).Обязательно включите
splitMulti
функцию, если при использовании этого подхода к описанному ниже просто оберните ее :). Также стоит отметить, что некоторые люди недовольны расширением встроенных модулей (поскольку многие люди делают это неправильно, и могут возникнуть конфликты), поэтому, если у вас есть сомнения, поговорите с кем-то более старшим, прежде чем использовать это, или спросите об этом :)Применение:
Наслаждайтесь!
источник
for(var i = 0; i < tokens.length; i++)
а нетfor(var i = 1; i < tokens.length; i++)
?tokens[1]
чтобы сохранить одну итерацию,tokens[0] == tempchar
и мыtempchar
разделимся после итерации,tokens
чтобы закончить. Я обновлю ответ соответственно спасибо @tic :).Для простоты: (добавьте «[] +» к вашему RegEx означает «1 или более»)
Это означает, что «+» и «{1,}» одинаковы.
источник
Хитрый метод:
источник
:/
'('
для того/(/g
чтобы заменить все(
элементы -g
это глобальный флаг для RegExp - так это поиск всех вхождений(
не первый одинДля тех из вас, кто хочет больше настроек в своей функции разделения, я написал рекурсивный алгоритм, который разделяет заданную строку со списком символов для разделения. Я написал это до того, как увидел вышеуказанный пост. Я надеюсь, что это поможет некоторым разочарованным программистам.
Пример выше возвращает:
["people", "and", "other", "things"]
Примечание:
flatten
функция была взята из Rosetta Codeисточник
Вы можете просто объединить все символы, которые вы хотите использовать в качестве разделителей, по отдельности или вместе в регулярное выражение и передать их в функцию split. Например, вы можете написать:
И вывод будет:
источник
Возможно, вам следует выполнить какую-то замену строки, чтобы превратить один разделитель в другой разделитель, чтобы в разделении у вас был только один разделитель.
источник
Привет, например, если у вас есть разделить и заменить в строке 7:05:45
Результат
источник
Вот новый способ достижения того же в ES6 :
Обратите внимание, в этой функции:
source
Результат приведенного выше кода будет:
источник
это вернет строку без специального символа.
источник
Мой рефакторинг @Brian ответа
источник
Я считаю, что одной из основных причин, по которой мне это нужно, является разделение путей к файлам на обоих
/
и\
. Это немного сложное регулярное выражение, поэтому я опубликую его здесь для справки:источник
Я думаю, что проще, если вы укажете, что вы хотите оставить вместо того, что вы хотите удалить.
Как будто вы хотите иметь только английские слова, вы можете использовать что-то вроде этого:
Примеры (запустить фрагмент):
источник
Начиная с решения @ stephen-sweriduk (это было мне более интересно!), Я немного изменил его, чтобы сделать его более универсальным и многократно используемым:
а потом
это возвращает как оригинал:
источник
Показать фрагмент кода
источник
Я предоставлю классическую реализацию для такой функции. Код работает практически во всех версиях JavaScript и является как-то оптимальным.
Просто чистый код:
Вы можете увидеть код, запущенный на детской площадке: https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf
источник
Я не знаю производительности RegEx, но вот еще одна альтернатива для RegEx, использующая собственный HashSet и работающая в сложности O (max (str.length, delimeter.length)):
источник
Не лучший способ, но работает для разделения с несколькими и различными разделителями / разделителями
HTML
Javascript
источник
Я использую регулярное выражение:
источник