5 Aralık 2022

Kelime sınırı: \b

Bir kelime sınırı \b, tıpkı ^ ve $ gibi bir testtir.

Regexp motoru (regexpleri aramak için oluşturulmuş program modülü), \b ile karşılaştığında karakter dizisindeki konumun bir kelime sınırı olup olmadığını kontrol eder.

Sözcük sınırı olarak nitelendirilen üç adet durum vardır:

  • Karakter dizisi başlangıcında. Şayet ilk karakter dizisi karakteri bir kelime karakteriyse \w.
  • Karakter dizisinin iki karakterinin arası. Bir tanesi kelime karakteri \w ise ve diğeri değilse.
  • Karakter dizisi sonunda. Eğer son karakter dizisi karakter bir kelime karakteriyse \w.

Örneğin, regexp \bJava\b ifadesi Merhaba, Java! içerisinde bulunacaktır, burada Java bağımsız bir kelimedir. Ancak Merhaba, JavaScript! içerisinde bulunmaz.

alert( "Merhaba, Java!".match(/\bJava\b/) ); // Java
alert( "Merhaba, JavaScript!".match(/\bJava\b/) ); // null

Hello, Java! karakter dizisinde aşağıdaki pozisyonlar \b’ye karşılık gelir.

Sonuç olarak \Merhaba\b ifadesiyle eşleşir, çünkü:

  1. Karakter dizisinin başlangıcı ilk \b testi ile eşleşir.
  2. Sonrasında Merhaba kelimesi eşleşir.
  3. Ardından \b, o ile bir boşluk arasında bulunduğumuzdan dolayı tekrar eşleşir.

Aynı şekilde \bJava\b şablonu de eşleşecektir. Ancak \bMerh\b eşleşmez, (çünkü b’den sonra bir kelime sınırı yoktur), aynı şekilde Java!\b da (çünkü ünlem işareti \w ile ifade edilen bir kelime karakteri değildir), dolayısıyla sonrasında bir kelime sınırı yoktur.

alert( "Merhaba, Java!".match(/\bMerhaba\b/) ); // Merhaba
alert( "Merhaba, Java!".match(/\bJava\b/) );  // Java
alert( "Merhaba, Java!".match(/\bMerh\b/) );  // null (eşleşme yok)
alert( "Merhaba, Java!".match(/\bJava!\b/) ); // null (eşleşme yok)

\b’yi yalnızca kelimelerle değil, rakamlarla da kullanabiliriz.

Örnek vermek gerekirse, \b\d\d\b şablonu 2 basamaklı sayılara bakacaktır. Başka bir deyişle, \w’den başka, boşluk veya noktalama işareti olmayan (veya metin başlangıcı/bitişi) karakterlerle çevrili bağımsız 2 basamaklı sayılara bakacaktır.

alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
alert( "12,34,56".match(/\b\d\d\b/g) ); // 12,34,56
Word boundary \b Latin alfabesi haricinde çalışmaz

Kelime sınırı testi \b, bir yanda \w, diğer yanda \w olmamama durumununun söz konusu olduğu pozisyonları kontrol eder.

Ancak \w, a-z şeklinde bir latin harfi (veya harf veya alt tire) anlamına gelir, sonuç olarak test Kiril veya Hiyeroglif gibi farklı karakterler için çalışmayacaktır.

Görevler

Zaman, saat:dakika şeklinde bir formata sahiptir. Ancak saat ve dakika iki basamaklıdır, 09:00 gibi.

Kahvaltı 09:00'da oda 123:456'da. karakter dizisi için zamanı bulacak bir regexp yazın.

Not: Bu görevde zamanın doğruluğunu kontrol etmeye gerek yok, bu nedenle 25:99 gibi bir saat dahi doğru bir sonuç olarak kabul edilebilir.

Not: Regexp, 123:456 ile eşleşmemeli.

Yanıt: \b\d\d:\d\d\b.

alert( "Kahvaltı 09:00'da oda 123:456'da.".match( /\b\d\d:\d\d\b/ ) ); // 09:00
Eğitim haritası