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.

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”.


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/);

6

możesz po prostu użyć

date.split(/-/);

lub

date.split('-');

1
Umieść podział wiersza przed kodem, a 4 spacje sformatują go poprawnie.
Brandon


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());


-1

spróbuj tego zamiast tego

date.split (/ \ W + /)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.