23 Kasım 2021

Çapalar: karakter dizisi (string) başlangıç ^ ve bitiş $

Düzeltme ^ ve dolar $ işaretlerinin, düzenli ifade (regexp) için özel anlamları vardır. Bunlar “çapalar” olarak adlandırılır.

Düzeltme işareti ^ metnin başlangıcı ile dolar işareti ise $ – metnin sonu ile eşleşir.

Örneğin, metnin Mary ile başlayıp başlamadığını test edelim:

let str1 = "Mary had a little lamb";
alert( /^Mary/.test(str1) ); // true

^Mary kalıbının anlamı: “dizi (string) başlangıcı (^) ve ardından Mary”.

Buna benzer olarak, metnin snow ile bitip bitmediğini snow$ kullanarak test edebiliriz:

let str1 = "it's fleece was white as snow";
alert( /snow$/.test(str1) ); // true

Bu gibi özel durumlarda (başlangıç ve bitiş), çapaların (^, $) yerine startsWith/endsWith string methodlarını kullanabiliriz. Düzenli ifadeler (regexp), karmaşık testler için kullanılmalıdır.

Tam eşleşme için test yapmak

İki çapanın birlikte kullanımıyla ^...$, string ile kalıbın tam olarak eşleşip eşleşmediği kontrol edilir. Örneğin, kullanıcı girişinin doğru biçimde olup olmadığını kontrol edelim.

Verilen dizinin (string) 12:34 biçiminde bir zaman olup olmadığını kontrol edelim. Kalıp şu şekilde olmalı: iki basamak, ardından iki nokta üst üste ve iki basamak daha.

Yukarda bahsedilen kalıp, düzenli ifadeler (RegExp) dilinde \d\d:\d\d karşılık gelir:

let goodInput = "12:34";
let badInput = "12:345";

let regexp = /^\d\d:\d\d$/;
alert( regexp.test(goodInput) ); // true
alert( regexp.test(badInput) ); // false, ":" ifadesinden sonra 2 basamak yerine 3 basamak vardır

Burada \d\d:\d\d eşleşmesi yapmak için; metnin başlangıcından ^ hemen sonra \d\d:\d\d konulmalı ve ardından $ eklenmelidir.

Dizi (string) tam olarak bu kalıpta olmalıdır. Herhangi bir sapma ya da fazla bir karakter varsa sonuç false olur.

Çapalar, m bayrağı kullanıldığında farklı davranır. Bir sonraki bölümde bu konuya değineceğiz.

Çapalar “sıfır genişlik” e sahiptir. Anchors have “zero width”

^ ve $ çapaları testlerdir. Genişliği yoktur.

Bir başka deyişle, çapalar herhangi bir karakterle eşleşmezler bunun yerine regexp motorunu, kullanılan kalıp için test etmeye zorlar.

Görevler

Hangi dizi(string) ^$ kalıbı ile eşleşir?

Tek eşleşme boş bir dizidir: metin başlar ve hemen biter.

Bu örnek, çapaların karakterler değil, testler olduğunu bir kez daha gösteriyor.

Dizi (string) boştur "". Regexp motoru öncelikle ^ çapasıyla eşleşir (satır başı), evet burada, daha sonra satır sonu gelir $, satır sonu da burada "". Böylece dizi ile kalıp eşleşmiş olur.

Eğitim haritası