Modül dersleri (4/4)
Normal ifadeyle böl
String.prototype.split(separator) yalnızca sabit bir dizeyi kabul etmez, aynı zamanda
ayrıca ayırıcı olarak bir regex. Bu, onu tokenleştirme için güçlü bir araç haline getirir
yapılandırılmış metin
'uno, due,tre quattro'.split(/[,\s]+/);
// ["uno", "due", "tre", "quattro"]/[,\s]+/ normal ifadesi "bir veya daha fazla virgül veya boşlukla" eşleşir: split
herhangi bir bileşik sınırlayıcıda bölünür.
Tipik durumlar
- İzin verilen CSV:
text.split(/\s*,\s*/)virgüllerin etrafındaki boşlukları işlemek için. - Saf tokenizer:
text.split(/\s+/)kelimeleri çıkarmak için. - Ayırıcıyı koruyun: normal ifade yakalama grupları içeriyorsa, grupların içeriği sonuç dizisine dahildir.
'a=1; b=2; c=3'.split(/(;)\s*/);
// ["a=1", ";", "b=2", ";", "c=3"]() grubu olmasaydı noktalı virgül kaybolurdu. (;) ile onu saklarsınız
sonuçta.
Bölünmüş işlemlerde ayırıcıları koruma
Yakalama parantezlerinin içine bölme ayırıcıları yerleştirirseniz, String.prototype.split çıktısı, ayırıcıları atmak yerine, son dizideki öğeler olarak kendilerini içerecektir.
Deneyin
İzin verilen tüm CSV ayırıcılarını bulun: çevresinde isteğe bağlı boşluklar bulunan bir virgül. Bu şekilde listeyi tokenize etmek için bölünmüş olarak kullanabilirsiniz.
İpucu göster
İsteğe bağlı boşlukları doldurmak için virgülden önce ve sonra \\s* kullanın.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
Tüm 'boşluk veya noktalı virgül' ayırıcılarını (bir veya daha fazla) bulun. Bu şekilde bölme, metni kelimelere ayıracaktır.
İpucu göster
\\'leri ve ;'yi birleştir + nicelik belirteciyle [\\s;] sınıfında.
3 denemeden sonra çözüm mevcut
Ek zorluk
Write a regex to use in a split that separates numbers while keeping math operators `+`, `-`, `*`, `/` as elements of the array.
İpucu göster
Enclose the math operators character class in capture parentheses to preserve them in the split array.
3 denemeden sonra çözüm mevcut