2012-09-26 18 views
6

Douglas Crockford'un 'JavaScript: The Good Parts' bölümünü okuyorum. İçinde, olumlu ve olumsuz bakış açılarına kısaca değiniyor, ama ne yaptıklarına dair kısa bir açıklamadan ve JavaScript'in iyi bir parçası olmadıkları gerçeğinden daha fazlası yok. Bu kitaptan başka, bunların SO veya regex kılavuz sitelerinde sakınılması gerektiği konusunda hiç bir şey görmedim. Bunun neden JavaScript'in kötü bir parçası olduğunu ve nasıl önlenmeleri gerektiğine dair daha fazla açıklama yapıp yapamayacağımı merak ediyorum - daha iyi bir çözüm olup olmadığı veya daha iyi uygulama tasarımına sahip olup olmadığı.Regex Pozitif ve Negatif Lookaheads Kötü (JavaScript) var mı?


alıntı (sayfa 75):

Pozitif ilerleme bir pozitif ileri yönlü grup ve onun dışındaki, yakalama yapmayan gruba grup maçları sonrasında, metin gibi bir (= öneki vardır.? grup etkili bir şey eşleşen başladığı yere geri sardığı. Bu iyi bir parçası değildir.

negatif ilerleme bir negatif ileri yönlü grup bir (?! önek. grubunun pozitif eşleşmesi gibidir, ancak eşleşmezse eşleşmez. Bu iyi bir bölüm değil.

cevap

4

Douglas Crockford'un önerilerinin çoğu, kodun "okunabilirliği" ve "uygunluğu" ile ilgili olmakla birlikte, aynı zamanda kodlayıcı amaçlarının "uygunluğu" ile ilgilidir. Douglas'ın örneğin bir regex noktasında kullanılmasını önermemesi gibi, bu herhangi bir karakterle eşleşmesi, neyi eşleştirmek istediğinizi açıklamaksızın, negatif bir bakış kullanarak "Buna bir şey vereyim" demeye eşittir. Her neyse, neden olumlu lookaheads kullanımı tavsiye değil, ama lookahead uygulamasında IE hata birçok referans hayal edemiyorum ...

+1

Açık p. 76, olumsuz karakter sınıflarını ('[^ ...]') kullanmaya itiraz etmez. Aslında onlara “kolaylık” diyor. –

+0

@ O.R.Mapper ilginç. Aslında, bu cevap çok kaynaksızdır. Umarım bir gün Crockford videolarını tekrar izlemeye ve kötü kısımları anlatan anlara göndermeler yapmaya vaktim olur. Bu konuda https://plus.google.com/u/0/+DouglasCrockfordEsq/posts adresinden işbirliği yapması için onu davet edebilir miyiz? –

İlgili konular