正規表現: セットとレンジ

概要: このチュートリアルでは、正規表現におけるセットとレンジについて学習します。

セット

角括弧はセット内の任意の文字を検索します。たとえば、[aeiou]は5つの文字('a'、'e'、'i'、'o'、'u')のいずれかに一致します。[...]はセットと呼ばれます。

たとえば、正規表現/[cbr]ats/gcatsbatsratsに一致します

let str = 'How cats, rats, and bats became Halloween animals';
let re = /[cbr]ats/g;
let results = str.match(re);

console.log(results);Code language: JavaScript (javascript)

出力

["cats", "rats", "bats"]Code language: JavaScript (javascript)

レンジ

角括弧には文字の範囲を含めることができます。たとえば、[a-z]aからzまでの文字範囲です。そして[0-9]は0から9までの数字です。

[a-zA-Z0-9_]\wと同じです。[0-9]\dと同じです。

範囲を除外する

範囲を除外するには、[^...]のような除外範囲を使用します。

たとえば、[^0-9]は数字以外の任意の文字に一致します。これは\Dと同じです。

または、[^aeiou]は「a」、「e」、「i」、「o」、「u」以外の任意の文字に一致します。

特殊文字のエスケープ

通常、特殊文字をエスケープするにはバックスラッシュを使用します(例: \.)。ただし、角括弧内では、角括弧に意味がある場合を除き、ほとんどの特殊文字をエスケープする必要はありません。

たとえば、キャレット(^)が文字列の先頭にある場合は、エスケープする必要があります

[\^#$]Code language: JavaScript (javascript)

キャレットが文字列の先頭ではない場合(^)、エスケープする必要はありません

[#^$]Code language: JavaScript (javascript)

フラグu

セットにサロゲートペアがある場合は、正規表現にフラグuを追加して正しく動作させる必要があります

let result = 'It is 🍎'.match(/[🍎🍅🍓]/);

console.log(result);Code language: JavaScript (javascript)

出力

["�"]Code language: JavaScript (javascript)

この例では、[🍎🍅🍓]には3つではなく6つの文字があります

let str = '🍎🍅🍓';

for(let i=0; i<str.length; i++) {
    console.log(str.charCodeAt(i));
}Code language: JavaScript (javascript)

出力

55356
57166
55356
57157
55356
57171Code language: JavaScript (javascript)

フラグuを追加すると、動作が正しくなります

let result = 'It is 🍎'.match(/[🍎🍅🍓]/u);

console.log(result);Code language: JavaScript (javascript)

出力

["🍎"]Code language: JavaScript (javascript)

要約

  • [...]を使用してセットを構成し、その中の任意の文字に一致します。
  • セット内で-を使用して範囲を構成し、範囲内の任意の文字に一致します。
  • 範囲を否定するには^を使用します。
このチュートリアルは役立ちましたか?