Pytanie wyrażenia regularnego podziału JavaScript

116

cześć Próbuję czegoś, co wydawało mi się raczej łatwym wyrażeniem regularnym w Javascript, ale sprawia mi wiele problemów. Chcę mieć możliwość dzielenia daty za pomocą dzielenia javascript albo przez „-”, „.”, „/” I „”.

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

Jakie jest prawidłowe wyrażenie regularne dla tej jakiejkolwiek pomocy, byłoby świetne.

Craig
źródło

Odpowiedzi:

174

Musisz umieścić znaki, które chcesz podzielić, w klasie znaków , co powie silnikowi wyrażeń regularnych, że „każdy z tych znaków jest zgodny”. Dla twoich celów wyglądałoby to następująco:

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

Chociaż myślniki mają specjalne znaczenie w klasach znaków jako specyfikator zakresu (tj. [a-z]Oznacza to samo co [abcdefghijklmnopqrstuvwxyz]), jeśli umieścisz go jako ostatnią rzecz w klasie, przyjmuje się, że oznacza to dosłowny myślnik i nie trzeba go zmieniać.

Aby wyjaśnić, dlaczego wzorzec nie zadziałał, /-./mówi aparatowi wyrażeń regularnych, aby dopasował literowy myślnik, po którym następuje dowolny znak ( kropki to symbole wieloznaczne w wyrażeniach regularnych). W przypadku „02-25-2010” będzie się dzielić za każdym razem, gdy napotkany zostanie „-2”, ponieważ kreska pasuje, a kropka pasuje do „2”.

Daniel Vandersluis
źródło
3
Możesz również wspomnieć, że kropka nie ma żadnego specjalnego znaczenia wewnątrz klasy znaków - zamiast działać jako znak wieloznaczny (co nie miałoby żadnego sensu), zachowuje się jak literał.
Bobby Jack,
11

lub po prostu (cokolwiek oprócz liczb):

date.split(/\D/);
Jo3y
źródło
6

możesz po prostu użyć

date.split(/-/);

lub

date.split('-');
Allan Ruin
źródło
1
Umieść podział wiersza przed kodem, a 4 spacje sformatują go poprawnie.
Brandon
5

Następnie podziel go na wszystko oprócz liczb:

date.split(/[^0-9]/);
bezużyteczny
źródło
3

Powiedz, że Twój ciąg to:

let str = `word1
word2;word3,word4,word5;word7
word8,word9;word10`;

Chcesz podzielić ciąg za pomocą następujących separatorów:

  • Dwukropek
  • Średnik
  • Nowa linia

Możesz podzielić ciąg w następujący sposób:

let rawElements = str.split(new RegExp('[,;\n]', 'g'));

Na koniec może być konieczne przycięcie elementów w tablicy:

let elements = rawElements.map(element => element.trim());
Bobzius
źródło
0

lub po prostu użyj dla ciągów dat 2015-05-20 lub 2015.05.20

date.split(/\.|-/);
Piotr Stępniewski
źródło
-1

spróbuj tego zamiast tego

date.split (/ \ W + /)

Omar
źródło
Czy możesz wyjaśnić, dlaczego jest to lepsza odpowiedź niż 5+ już opublikowane? A jak to właściwie działa?
mjuarez
To faktycznie zadziałało najlepiej ze wszystkich odpowiedzi.
reectrix