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

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

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

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


person Craig    schedule 24.08.2010    source источник


Ответы (7)


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

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

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

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

person Daniel Vandersluis    schedule 24.08.2010
comment
Вы также можете упомянуть, что точка не имеет никакого особого значения внутри класса символов - вместо того, чтобы действовать как подстановочный знак (что не имеет никакого смысла), она действует как литерал. - person Bobby Jack; 17.07.2014

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

date.split(/\D/);
person Jo3y    schedule 12.11.2013

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

date.split(/-/);

or

date.split('-');
person Allan Ruin    schedule 23.01.2012
comment
Поместите разрыв строки перед кодом, и 4 пробела отформатируют его правильно. - person Brandon; 23.01.2012

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

date.split(/[^0-9]/);
person useless    schedule 20.08.2013

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

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());
person Bobzius    schedule 21.01.2019
comment
Почему g-flag? - person d-b; 01.09.2020
comment
Согласитесь, отлично работает без флага g - person Antoine Bolvy; 17.06.2021

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

date.split(/\.|-/);
person Piotr    schedule 20.05.2015

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

date.split (/ \ W + /)

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