Onlarla nasıl başa çıkarım?
Herhangi bir yeni şey gibi:
10 Study
20 Practice
30 goto 10
Ders çalışma
En başarılı öğretmenlerin herhangi bir konuyu öğretmeye başladığını ilk önce konuyla ilgili biraz arka plan sağlayarak buluyorum. Ne öğrendiğinize ve en önemlisi neden öğrendiğinize ilişkin bir bağlamın olması önemlidir .
Her şey dize eşleşiyor
Normal İfadeler, metindeki eşleşen desenlerin bir yoludur. Pek çok başka programlama diline dahil edilmiş bir bildirim dilidir.
Bilgilendirici bir dil olduğunu vurgulamak isterim, düzenli ifadeler hangi dizginin eşleşeceğini ifade etmek için yararlıdır , ancak programın eşleşmeyi nasıl yapacağını hiçbir şekilde ifade etmezler . Bu sebeple, aynı programlama dilinde normal ifadeleri çok hızlı ve çok yavaş kullanmak, sadece farklı bir RegEx ayrıştırıcı kullanarak mümkündür.
Düzenli ifadeler oluşturmanın nedeni çoğu programlama dilinin oluşturulması için aynıdır: programcılar kendilerini aynı karmaşık işi tekrar tekrar gerçekleştirirken bulmuş ve kodu daha basit bir şekilde yazmak istediklerine karar vermişlerdir.
Bazıları, önceki cümlenin çizgileri boyunca bir şeyler söyleyerek şikayet eder (ve etmelidir):
RegEx bir programı daha basit hale getirmiyor.
bu doğru
RegEx bir programı daha basit yapmaz , RegEx programı yazmayı daha basit hale getirir . Tüm doğru vakaların doğru şekilde eşleştiğinden ve yanlış durumların tamamının bulunmadığından emin olmak için testinizde hala kapsamlı olmanız gerekir. "Tümünü" test etmek gerçekten zor ve karmaşık modellerle "çoğu" yu test etmek gerçekten zor. En kötüsü, hala "bazı" vakaları test ediyor olmalısınız.
bazı örnekleri bir araya getirip, JavaScript'in RegEx motorunu zorunlu olarak seçtim çünkü tarayıcıda kolayca test edebiliyorum ve RegEx değişmezlerini kullanırken kaçan herhangi bir dize yapmak zorunda kalmayacağım.
Normal dize eşleştirmesi yaptığınızda, bir dize değerini diğerine karşı sınarsınız. Herhangi bir yerden gelebilirler, ancak sonunda birbirleriyle karşılaştırılan iki tel alır:
if ( 'foo' == 'bar' ) doSomething();
Bu örnek berbat çünkü hiçbir şey yapmaz
if ( foo == 'bar' ) doSomething();
Çok daha iyi; Şimdi, aslında bir şeyin yapılıp yapılmayacağını önceden bilmiyoruz. Artık kullanıcı girişi kabul etmeye başlayabiliriz:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Harika, şimdi kullanıcılar giriş yapabilir bar
ve bir şeyler olabilir, sizden "bar"
bunun işe yaramadığını ya da "BAR" çalışmadığını veya BRA
100 kez yazdıklarını ve hiçbir şey olmadıklarını söyleyen hata raporlarını alana kadar gerçekleşir.
Yanlış yazımları ve fazladan karakterleri dikkate almamak 'bar' != 'BAR'
ve programcıların, karakterlerin yanlış olduğu durumlarda sınanmanın bir yolunu düşünmeleri gerekir.
Basit çözüm, kullanım toLowerCase
. Bu harika çalışıyor, fakat eşleştirirken Amerikan İngilizcesi üzerinden İngiliz İngilizcesi kullanan kullanıcılarımız ne durumda something == 'color'
? Şimdi eşleşmen gerekecek something == 'color' || somthing == 'colour'
.
Uzun lafın kısası, basit desenler çok hızlı bir şekilde tekrarlayan kodlara dönüşür.
Renk örneği basitçe şununla eşleştirilebilir:
/colou?r/.test( something )
Düzenli ifadelerin temellerinin sağlam bir şekilde anlaşılması, tekerleği yeniden icat ederek harcadığınız zamanı önemli ölçüde azaltabilir.
Nerede çalışmalı?
Düzenli ifadeler uygulayan çoğu dil, bu dilde Normal ifadeler kullanmanın belirli bir sözdizimi için mevcut en az bir kaynağa sahiptir. One JavaScript MDN'yi bulunabilir
oku onu.
hepsini.
sonra tekrar oku.
Öğrenmesi zaman alır, bunu bir yatırım olarak düşünün: RegEx'i öğrenmek için bir saat, bir dizi dizgi eşleştirmesi yapmanız gerektiğinde bir saat, daha sonra bir sonraki saatte bir saat tasarruf sağlar.
Uygulama
RegEx ile ilgili her şeyi okuduktan sonra, muhtemelen çoğunu anlamayacaksınız. Çünkü aslında onunla hiçbir şey yapmıyorsun .
Neden bu örnek için JS'yi seçtiğimi söyledim, tarayıcınızda bununla uğraşmanızı tavsiye ediyorum. Hızlıdır ve bunu doğrudan URL çubuğunuzda yapabilirsiniz.
JS'nin RegEx'i kullanmanın birkaç farklı ve basit yolu vardır:
string.match( regex )
regex.exec( string )
regex.test( string )
Gibi basit bir şeyle başlayarak:
javascript:'color'.match(/colou?r/);
Ayağınızı kapıya almanın kolay bir yoludur. Oynayın, neyin eşleştiğini ve neyin eşleşmediğini görün.
Uygulamaya takıldığınızda, devam edin 30
. Daha fazlasını öğrenmek için okumanız gerekir, ancak öğrendiklerinizi gerçekten anlamak için pratik yapmanız gerekir.