単語境界 \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
に一致します。理由は次のとおりです。
- 文字列の先頭で、最初のテスト
\b
に一致します。 - 次に、単語
Hello
に一致します。 - 次に、
o
とコンマの間にいるため、テスト\b
が再び一致します。
そのため、パターン \bHello\b
は一致しますが、\bHell\b
(l
の後に単語境界がないため)や 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
(または数字またはアンダースコア)を意味するため、キリル文字や象形文字など、他の文字ではテストは機能しません。
コメント
<code>
タグを使用します。数行のコードの場合は、<pre>
タグで囲みます。10行以上のコードの場合は、サンドボックス(plnkr、jsbin、codepen…)を使用します。