Pertanyaan javascript split regex

116

halo Saya mencoba apa yang saya pikir akan menjadi regex yang agak mudah di Javascript tetapi memberi saya banyak masalah. Saya ingin kemampuan untuk membagi tanggal melalui pemisahan javascript baik dengan '-', '.', '/' Dan ''.

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

Apa regex yang benar untuk ini dan semua bantuan akan sangat bagus.

Craig
sumber

Jawaban:

174

Anda perlu meletakkan karakter yang ingin Anda pisahkan dalam kelas karakter , yang memberi tahu mesin ekspresi reguler "salah satu karakter ini cocok". Untuk tujuan Anda, ini akan terlihat seperti:

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

Meskipun tanda hubung memiliki arti khusus dalam kelas karakter sebagai penentu rentang ( [a-z]artinya sama dengan [abcdefghijklmnopqrstuvwxyz]), jika Anda meletakkannya sebagai hal terakhir di kelas, itu dianggap berarti tanda hubung literal dan tidak perlu di-escape.

Untuk menjelaskan mengapa pola Anda tidak berfungsi, /-./beri tahu mesin ekspresi reguler untuk mencocokkan karakter tanda hubung literal diikuti dengan karakter apa pun ( titik adalah karakter wildcard dalam ekspresi reguler). Dengan "02-25-2010", ini akan dibagi setiap kali "-2" ditemukan, karena tanda hubung cocok dan titik cocok dengan "2".

Daniel Vandersluis
sumber
3
Anda juga dapat menyebutkan bahwa titik tidak memiliki arti khusus di dalam kelas karakter - alih-alih bertindak sebagai karakter wildcard (yang tidak masuk akal), ia bertindak sebagai literal.
Bobby Jack
11

atau hanya (apa saja kecuali angka):

date.split(/\D/);
Jo3y
sumber
6

Anda bisa menggunakan

date.split(/-/);

atau

date.split('-');
Allan Ruin
sumber
1
Letakkan jeda baris sebelum kode Anda dan 4 spasi akan memformatnya dengan benar.
Brandon
5

Kemudian pisahkan pada apa pun kecuali angka:

date.split(/[^0-9]/);
tak berguna
sumber
3

Katakanlah string Anda adalah:

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

Anda ingin memisahkan string dengan pembatas berikut:

  • Usus besar
  • Titik koma
  • Garis baru

Anda bisa membagi string seperti ini:

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

Terakhir, Anda mungkin perlu memangkas elemen dalam array:

let elements = rawElements.map(element => element.trim());
Bobzius
sumber
0

atau cukup gunakan untuk string tanggal 2015-05-20 atau 2015.05.20

date.split(/\.|-/);
Piotr Stępniewski
sumber
-1

coba ini sebagai gantinya

date.split (/ \ W + /)

Omar
sumber
Bisakah Anda menjelaskan mengapa ini adalah jawaban yang lebih baik daripada 5+ yang sudah diposting sebelumnya? Dan bagaimana cara kerjanya?
mjuarez
Ini benar-benar bekerja yang terbaik dari semua jawaban untuk saya.
reectrix