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


116

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

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

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

Ответы:


174

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

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

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

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


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

11

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

date.split(/\D/);

6

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

date.split(/-/);

или

date.split('-');

1
Поместите разрыв строки перед кодом, и 4 пробела отформатируют его правильно.
Brandon


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());


-1

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

date.split (/ \ W + /)


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

На самом деле это сработало для меня лучше всего.
reectrix
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.