2021年12月12日

単語境界: \b

単語境界 \b は、^$ と同様に、テストです。

正規表現エンジン(正規表現の検索を実装するプログラムモジュール)が \b に遭遇すると、文字列内の位置が単語境界であるかどうかを確認します。

単語境界として認められる位置は3種類あります。

  • 文字列の先頭で、最初の文字が単語文字 \w である場合。
  • 文字列内の2つの文字の間で、一方が単語文字 \w で、もう一方が単語文字でない場合。
  • 文字列の末尾で、最後の文字が単語文字 \w である場合。

たとえば、正規表現 \bJava\b は、Hello, Java! のように Java が独立した単語である場合に一致しますが、Hello, JavaScript! には一致しません。

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

文字列 Hello, Java! では、以下の位置が \b に対応します。

そのため、パターン \bHello\b に一致します。理由は次のとおりです。

  1. 文字列の先頭で、最初のテスト \b に一致します。
  2. 次に、単語 Hello に一致します。
  3. 次に、o とコンマの間にいるため、テスト \b が再び一致します。

そのため、パターン \bHello\b は一致しますが、\bHell\bl の後に単語境界がないため)や Java!\b (感嘆符は単語文字 \w ではないため、その後に単語境界がないため)は一致しません。

alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
alert( "Hello, Java!".match(/\bJava\b/) );  // Java
alert( "Hello, Java!".match(/\bHell\b/) );  // null (no match)
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (no match)

\b は単語だけでなく、数字にも使用できます。

たとえば、パターン \b\d\d\b は、独立した2桁の数字を探します。言い換えれば、スペースや句読点(またはテキストの開始/終了)など、\w とは異なる文字で囲まれた2桁の数字を探します。

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
単語境界 \b は、ラテンアルファベット以外では機能しません

単語境界テスト \b は、位置の片側に \w があり、もう一方の側に「\w ではない」ことを確認します。

しかし、\w はラテン文字 a-z (または数字またはアンダースコア)を意味するため、キリル文字や象形文字など、他の文字ではテストは機能しません。

タスク

時刻の形式は hours:minutes です。時間と分はどちらも2桁で、09:00 のようになります。

文字列 Breakfast at 09:00 in the room 123:456. から時刻を見つけるための正規表現を作成してください。

追伸 このタスクでは、まだ時刻の正確性をチェックする必要がないため、25:99 も有効な結果となります。

追追伸 正規表現は 123:456 に一致してはなりません。

答え: \b\d\d:\d\d\b です。

alert( "Breakfast at 09:00 in the room 123:456.".match( /\b\d\d:\d\d\b/ ) ); // 09:00
チュートリアルマップ

コメント

コメントする前にこれを読んでください…
  • 改善のための提案がある場合は、コメントする代わりに GitHub の issue またはプルリクエストを送信してください。
  • 記事の内容が理解できない場合は、詳しく説明してください。
  • 数語のコードを挿入するには、<code> タグを使用します。数行のコードの場合は、<pre> タグで囲みます。10行以上のコードの場合は、サンドボックス(plnkrjsbincodepen…)を使用します。