2013-05-09 38 views
6

Bir headscratcher'a ulaştığımda bazı eski kodları koruyorum. Bu regex deseniyle kafam karıştı: /^.*$/ (textFieldValidation(this,'true',/^.*$/,'','''da bir argüman olarak verildiği gibi).

ben bu regex yorumlamak:

  • /^ = açık desen
  • = (EOL hariç) herhangi bir değeri tek bir karakterle eşleşmek
  • * = maç 0 kez veya daha fazla
  • . hattın $ = maçı ucu
  • /= yakın desen

Yani ... Bu pat düşünüyorum tern herşeyle eşleşir, bu da fonksiyonun atık işleme döngülerinden başka bir şey yapmadığı anlamına gelir. Doğrumuyum?

+0

My programcı duyular karıncalanma edilir, beş, bir JavaScript işlevi paramerts, ve bunlardan biri 'true'' olup. Bu iyi – NicoSantangelo

+0

@NicoSantangelo olamaz: o –

cevap

5

Bu tek bir metin satırı ile eşleşir.

^ girdinin başlangıcıyla eşleştiği ve $ girişin sonuyla eşleştiği için çok satırlı bir Dizeyle eşleşmez. Herhangi bir yeni satır (\n) ya da şapka getirisi (\r) arasında semboller varsa - bu başarısız olur.

Örneğin, 'foo'.match(/^.*$/)foo döndürür.

Ama 'foo\nfoo'.match(/^.*$/) döner null.

+0

Ayrıca, '\ r' içeren bir dizeyle eşleşmeyeceğini de unutmayın. –

+0

Teşekkürler, düzeltilmiş –

+0

Teşekkür ederim Oleg ... –

1

Evet, oldukça doğru. Bu regex, EOL (eğer dotall = false) veya herhangi bir dize (dotall = true) içermeyen herhangi bir dizgi ile eşleşir.

+1

Ben JS dotall olduğunu düşünmüyorum korkunç. –

+0

JS'de regexp'lerin nasıl uygulandığını bilmiyorum, ancak diğer dillerde dotall /../s ile ya da – Maxim

+0

derleme işlevine geçiş bayraklarıyla etkinleştirilebilir. JS'nin /s bayrağı yok. –

5

^ "Başlangıçta başlıyor." "Çizginin sonuna." .
"şey Eşleştirme ..."
* "0 veya daha çok kez"
$

Evet, doğru üzerinde, yani boş falan maçları ediyoruz.

Ve a handy little cheat sheet.

5

Regexp, dizenin hiçbir \n veya \r içermediğini kontrol eder. Noktalar yeni hatlarla eşleşmiyor.

Örnekler:

/^.*$/.test(""); // => true 
/^.*$/.test("aoeu"); // => true 
/^.*$/.test("aoeu\n"); // => false 
/^.*$/.test("\n"); // => false 
/^.*$/.test("aoeu\nfoo"); // => false 
/^.*$/.test("\nfoo"); // => false 
+0

Teşekkürler Florian ile eşleşmesini söyleyen regex motoruna bir argüman sağlamazsanız ... –