概要: このチュートリアルでは、正規表現におけるセットとレンジについて学習します。
セット
角括弧はセット内の任意の文字を検索します。たとえば、[aeiou]
は5つの文字('a'、'e'、'i'、'o'、'u')のいずれかに一致します。[...]
はセットと呼ばれます。
たとえば、正規表現/[cbr]ats/g
はcats
、bats
、rats
に一致します
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
57171
Code language: JavaScript (javascript)
フラグu
を追加すると、動作が正しくなります
let result = 'It is 🍎'.match(/[🍎🍅🍓]/u);
console.log(result);
Code language: JavaScript (javascript)
出力
["🍎"]
Code language: JavaScript (javascript)
要約
[...]
を使用してセットを構成し、その中の任意の文字に一致します。- セット内で
-
を使用して範囲を構成し、範囲内の任意の文字に一致します。 - 範囲を否定するには
^
を使用します。
このチュートリアルは役立ちましたか?