Non-RegExp
Я не знаю о "лучшем", но вам не нужно регулярное выражение:
var str = "2005-05-28";
var parts = str.split("-");
var dt = new Date(parseInt(parts[0], 10),
parseInt(parts[1], 10) - 1,
parseInt(parts[2], 10));
Живой пример
Использует String#split
для разбиения строки на символы -
, затем конструктор Date
, который принимает год, месяц (начиная с 0) и день (начиная с 1).
RegExp
Имейте в виду, что если вы действительно хотите использовать регулярное выражение, вы можете:
var str = "2005-05-28";
var parts = str.match(/^(\d{1,4})-(\d{1,2})-(\d{1,2})$/);
if (parts) {
var dt = new Date(parseInt(parts[1], 10),
parseInt(parts[2], 10) - 1,
parseInt(parts[3], 10));
}
Живой пример
Использует регулярное выражение с группами захвата, сопоставляя его с помощью String#match
, возвращая массив с полным совпадением с индексом 0
, за которым следуют группы захвата.Но за мои деньги регулярное выражение на самом деле ничего вам не покупает.
За пределами
Если ваши строки дат становятся более сложными или могут варьироваться, я бы посмотрел на решение проблемы добиблиотека типа DateJS .Но если у вас такой регулярный формат, вы золотой.