2012-03-16 16 views
6

Próbuję podzielić następujący (lub podobny) ciąg "08-27-2015 07:25:00 AM". Obecnie używamDzielenie liczb i liter w ciągu, który zawiera zarówno

var parts = date.split(/[^0-9a-zA-Z]+/g); 

co skutkuje

["02", "27", "2012", "03", "25", "00AM"] 

Problem polega na tym ze 00AM części. Chcę, żeby to też było rozdzielone. Tak doskonały wynik będzie:

["02", "27", "2012", "03", "25", "00", "AM"] 
+1

Czy format wejścia konsekwentnie jest datą w tym formacie? – gahooa

+0

Jesteś zainteresowany dzieleniem lub rzeczywistymi częściami łańcucha? –

+0

Używam go rzeczywiście do parsowania dat w ten sposób. Sergio, nie jestem pewien, co masz na myśli. Chcę uzyskać prawidłowe części i próbuję tego, dzieląc ciąg. –

Odpowiedz

20

Jeśli szukasz sekwencji liter lub cyfr, ale nie jest to sekwencja zarówno mieszanych, można to zrobić ...

"08-27-2015 07:25:00AM".match(/[a-zA-Z]+|[0-9]+/g) 

Powstały w ...

["08", "27", "2015", "07", "25", "00", "AM"] 

po obu stronach | mamy sekwencję jednego lub kilku liter i sekwencję o ne lub więcej liczb. Więc kiedy natknie się na literę, zbierze wszystkie sąsiadujące litery, dopóki nie dotrze do litery, w którym to momencie gromadzi wszystkie sąsiadujące liczby i tak dalej.

Każda inna postać po prostu nie pasuje, więc nie staje się częścią wyniku.

+1

To po prostu idealne, nawet dzieli "02June2015". Dzięki! –

1
var date = "08-27-2015 07:25:00AM"; 
var parts = date.replace(/([AP]M)$/i, " $1").split(/[^0-9a-z]+/ig); 

var date = "05June2012"; 
var parts = date.replace(/([a-z]+)/i, " $1 ").split(/[^0-9a-z]+/ig); 
+0

Chociaż można napisać ogólny rozdzielacz, trzeba wiedzieć, czego się spodziewać w wynikowej tablicy. Nie jestem więc pewien, czy miałoby to jakiś użyteczny cel, jeśli chodzi o przetwarzanie, tj. Jeśli nie znasz formatu danych wejściowych, wynikowa tablica byłaby innego rozmiaru i zawierałaby różne elementy w różnych lokalizacjach. Jak byś wiedział, co z tym zrobić? –

0

Jeśli data jest zawsze w tym formacie można użyć:

var parts = date.match(/([0-9]{2})-([0-9]{2})-([0-9]{4})\s([0-9]{2}):([0-9]{2}):([0-9]{2})(AM|PM)/).splice(1)

0

chciałbym użyć biblioteki datę do analizowania pola, które chcesz. W ten sposób można obsługiwać wiele formatów i nie martwić się o parsowanie za pomocą wyrażeń regularnych. Podczas gdy DateJS jest trochę stary, dobrze się sprawdza podczas analizowania.

Powiązane problemy