単語境界アサーション: \b, \B

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

単語境界アサーションは、文字列の現在の位置が単語境界であるかどうかを調べます。単語境界とは、次の文字が単語文字で、前の文字が単語文字でない場合、またはその逆の場合です。

構文

regex
\b
\B

解説

\b は文字列の現在の位置が単語境界であることを表明します。\B はこの表明とは逆で、現在の位置が単語境界でないことを表明します。両者ともアサーションなので、他の文字エスケープ文字クラスエスケープとは異なり、\b\B は文字を消費しません。

単語文字は次の通りです。

  • 英文字 (A–Z, a–z)、数字 (0–9)、アンダースコア (_)。
  • 正規表現が Unicode 対応i フラグが設定されている場合、大文字小文字の変換によって上記の文字のいずれかに正規化される他の Unicode 文字。

単語文字は \w 文字クラスエスケープでも一致します。

範囲外の入力位置は非単語文字とみなされます。 例えば、次の例は照合に成功します。

js
/\ba/.exec("abc");
/c\b/.exec("abc");

/\B /.exec(" abc");
/ \B/.exec("abc ");

単語の検出

次の例は、文字列が "thanks" または "thank you" という単語を含んでいるかどうかを検出します。

js
function hasThanks(str) {
  return /\b(thanks|thank you)\b/i.test(str);
}

hasThanks("Thanks! You helped me a lot."); // true
hasThanks("Just want to say thank you for all your work."); // true
hasThanks("Thanksgiving is around the corner."); // false

警告: すべての言語で単語の境界が明確に定義されているわけではありません。日本語やタイ語のように空白の区切りがない言語を扱う場合は、代わりに Intl.Segmenter のような高度なライブラリーを使って単語を検索してください。

仕様書

Specification
ECMAScript Language Specification
# prod-Assertion

ブラウザーの互換性

BCD tables only load in the browser

関連情報