2013-03-17 22 views
7

JavaScript'teki normal ifadeleri yorumlamaya çalışıyorum.Normal İfadelerle İlgili Yorumlar

regex kullanarak koddan yorumları kaldırmak için nasıl birçok kaynak var gibi gözüküyor ama aslında nasıl comment JavaScript düzenli ifadeler yüzden anlamak kolaydır.

Herhangi bir yardım büyük beğeni topluyor!

+0

[Perl's/x 'değiştiricisi] gibi bir şey arıyorsanız (http://stackoverflow.com/q/632795/139010), JavaScript'de böyle bir şey yoktur. –

+2

İlginç bir soru. Düzenli ifademi dizelere bölerim ve dizeleri yorumladım, ardından bunları RegExp'e ekledim. Daha iyi bir yolu duymak isterim. –

cevap

10

Maalesef, JavaScript'in, diğer dillerde başka türkçeye benzeyen normal ifade hazırlıkları için bir ayrıntılı modu yoktur. this interesting, though bulabilirsiniz. özel x bayrak var,

var r = new RegExp(
    '('  + //start capture 
    '[0-9]+' + // match digit 
    ')'  //end capture 
); 
r.test('9'); //true 
+0

İlginç olan, ancak bariz olan sınır, regex değişmezlerini oluşturmanıza izin vermemesidir. –

+1

"Yeni RegExp()" sözdizimini kullanamayacağınız regex değişmezleriyle neler yapabilirsiniz? – plemarquand

+3

@plemarquand Kaçmak bir acıya dönüşür. Bir dizeye bir dize gömdüğünüzde, özel karakterlerine dikkat etmeniz gerekir. Örneğin, '/ s \/\ d + /', \\/\\ d + ''olur. Bu nedenle, dinamik olarak inşa ederken dikkatli olmanız gerekir. Temel olarak, sunucu çorbasındaki dil sorunuyla aynı sorun. Yukarıdaki #read için – Zirak

1

Açıklamak için normal ifadeyle çizginin üzerinde düzenli bir açıklama yapmanızı öneririm.

Daha fazla özgürlüğe sahip olacaksınız.

+1

Hattın üstünde düzenli bir açıklama bu durumda nasıl yardımcı olur? '(?: [A-z0-9! # $% & '* +/=?^_' {|} ~ -] + (?: \ . [a-z0-9 # $% & '* +/=^_ '{|} ~ -!?] +) * |" (?: [\ x01- \ X08 \ x0b \ x0c \ x0e- \ x1f ? \ x21 \ x23- \ X5b \ x5d- \ x7f] | \\ [\ x01- \ X09 \ x0b \ x0c \ x0e- \ x7f]) * ") @ (: (: [a-z0-9] (: [a-z0-9 -] * [a-0-9]?). \) + [a-0-9] (: [a-z0-9 -] * [a-z0-9 ]) |? \ [(:(?: 25 [0-5?] | 2 [0-4] [0-9] |? [01] [0-9] [0-9]) \). {3} (?: 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9] |? [a-z0-9 -] * [a-z0-9]: (?: [\ x01- \ X08 \ x0b \ x0c \ x0e- \ x1f \ x21- \ X5a \ x53- \ x7f] | \\ [\ x01- \ X09 \ x0b \ x0c \ x0e- \ x7f]) +) \]) $ ' Bu, e-posta için bir regextir –

+0

Yukarıda çok satırlı bir yorum yazdınız. Ve bunu, yığın başına parçalara ayırın (Patlama Hapı önerileriyle aynıdır, ama yukarıda. Reg'i değiştirmek gerekirse, çok daha kullanışlıdır.). – Jean

+4

@BenjaminGruenbaum Biliyorsunuz [e-posta adresiniz yanlış yazılmış olabilir] (http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/), değil mi? –

3

birkaç diğer dillerde (özellikle Perl) içerisinde: Herhangi bir harici kütüphaneleri Ziyade

, en iyi bahis sadece normal dizeyi kullanın ve bu kapatmaktır. Ayarlandığında, regexp herhangi bir boşluk ve onun içindeki yorumları yok sayar. Ne yazık ki, javascript regexps x bayrağını desteklemiyor.

Sözdizimi olmayan, okunabilirlikten yararlanmanın tek yolu kuraldır. Benimki, zorlu düzenli ifadeden önce, x işaretini taşıyormuş gibi içeren bir yorum eklemektir. Örnek:

/* 
    \+?  #optional + sign 
    (\d*) #the integeric part 
    (  #begin decimal portion 
    \. 
    \d+ #decimal part 
) 
*/ 
var re = /\+?(\d*)(\.\d+)/; 

daha karmaşık örnekler için, ben tekniği here ve here yaptıklarına görebilirsiniz.

+1

+1, bu boku tekrarlamıyorum (evet, birisi bağlantılarınızı takip eder). –