Питання з розбиткою Javascript


116

привіт, я намагаюся зробити те, що я вважав би досить легким регулярним виразом в JavaScript, але доставляє мені багато проблем. Я хочу, щоб поділити дату за допомогою розбиття javascript або на '-', '.', '/' І ''.

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

Що для цього правильний регулярний вираз, і вся допомога була б чудовою.

Відповіді:


174

Вам потрібно поставити символи, на яких ви хочете розділити, в класах символів , який повідомляє двигуну регулярних виразів "будь-який з цих символів відповідає". Для ваших цілей це виглядатиме так:

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

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

Щоб пояснити, чому ваш шаблон не працює, /-./вказує двигун регулярного вираження, щоб він відповідав буквальному символу тире, за яким слід будь-який символ ( точки - це символи підстановки у регулярних виразах). З "02-25-2010" це розділиться щоразу, коли зустрінеться "-2", оскільки тире і крапки "2".


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

11

або просто (що завгодно, крім цифр):

date.split(/\D/);

6

ви могли просто використовувати

date.split(/-/);

або

date.split('-');

1
Поставте перерву рядка перед кодом, і 4 пробіли відформатують його належним чином.
Брендон


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.