Вопрос о разделении регулярного выражения javascript

116

привет, я пробую то, что, как я думал, будет довольно простым регулярным выражением в Javascript, но доставляет мне много проблем. Мне нужна возможность разделить дату с помощью разделения javascript на '-', '.', '/' И ''.

var date = "02-25-2010";
var myregexp2 = new RegExp("-."); 
dateArray = date.split(myregexp2);

Какое правильное регулярное выражение для этого, и вся помощь будет отличной.

Craig
источник

Ответы:

174

Вам нужно поместить символы, которые вы хотите разделить, в класс символов , который сообщает механизму регулярных выражений, что «любой из этих символов соответствует». Для ваших целей это будет выглядеть так:

date.split(/[.,\/ -]/)

Хотя тире имеют особое значение в классах символов в качестве спецификатора диапазона (т.е. [a-z]означает то же, что и [abcdefghijklmnopqrstuvwxyz]), если вы поместите его в последнюю очередь в классе, оно будет означать буквальное тире, и его не нужно экранировать.

Чтобы объяснить, почему ваш шаблон не работает, /-./указывает механизму регулярных выражений на соответствие буквальному тире, за которым следует любой символ ( точки - это символы подстановки в регулярных выражениях). С «25.02.2010» он будет разделяться каждый раз, когда встречается «-2», потому что тире соответствует, а точка соответствует «2».

Даниэль Вандерслуис
источник
3
Вы также можете упомянуть, что точка не имеет особого значения внутри класса символов - вместо того, чтобы действовать как подстановочный знак (что не имеет никакого смысла), она действует как литерал.
Бобби Джек
11

или просто (что угодно, кроме цифр):

date.split(/\D/);
Jo3y
источник
6

ты мог бы просто использовать

date.split(/-/);

или

date.split('-');
Аллан Руин
источник
1
Поместите разрыв строки перед кодом, и 4 пробела отформатируют его правильно.
Brandon
5

Затем разделите его на что угодно, кроме чисел:

date.split(/[^0-9]/);
бесполезный
источник
3

Скажите, что ваша строка:

let str = `word1
word2;word3,word4,word5;word7
word8,word9;word10`;

Вы хотите разделить строку следующими разделителями:

  • Двоеточие
  • Точка с запятой
  • Новая линия

Вы можете разделить строку следующим образом:

let rawElements = str.split(new RegExp('[,;\n]', 'g'));

Наконец, вам может потребоваться обрезать элементы в массиве:

let elements = rawElements.map(element => element.trim());
Bobzius
источник
0

или просто используйте для строк даты 2015-05-20 или 2015.05.20

date.split(/\.|-/);
Петр Степневский
источник
-1

попробуйте это вместо

date.split (/ \ W + /)

Омар
источник
Можете ли вы объяснить, почему это лучший ответ, чем 5+, уже опубликованный ранее? А как это на самом деле работает?
mjuarez
На самом деле это сработало для меня лучше всего.
reectrix