JavaScript正規表現における文字クラス
文字クラス \d と \w はあまり柔軟ではありません。
すべての文字を検索するが数字は除外するといった単純なタスクでさえ、これらでは解決できません。
このようなタスクには、'または'を表す角括弧を使用する必要があります。
角括弧は、その内部に列挙された任意の1文字を置き換えます。
例えば、/x[abc]x/ と記述した場合、両端には文字xが位置し、その間に1文字、つまり'a'、'b'、または'c'のいずれかが来ることを意味します。
角括弧の後には繰り返し演算子を記述できます。
例えば、/x[abc]+x/ と記述した場合、xの間に任意の数の'a'、'b'、'c'文字が、任意の組み合わせで存在することを意味します。
文字を列挙するだけでなく、2つの文字の間にハイフンを記述することで文字の範囲を作成することもできます。
例えば、[a-d] と記述すると、'a'から'd'までのすべての文字が得られます。
例を見てみましょう。
例
この例の検索パターンは次の通りです:
xの間に、'a'から'z'までの任意の文字:
let str = 'xax xbx xcx x@x';
let res = str.replace(/x[a-z]x/g, '!');
結果、変数には次の内容が書き込まれます:
'! ! ! x@x'
例
この例の検索パターンは次の通りです:
xの間に、'a'から'k'までの任意の文字:
let str = 'xax xbx xmx x@x';
let res = str.replace(/x[a-k]x/g, '!');
結果、変数には次の内容が書き込まれます:
'! ! xmx x@x'
例
この例の検索パターンは次の通りです:
xの間に、'A'から'Z'までの任意の文字:
let str = 'xax xBx xcx x@x';
let res = str.replace(/x[A-Z]x/g, '!');
結果、変数には次の内容が書き込まれます:
'xax ! xcx x@x'
例
この例の検索パターンは次の通りです:
xの間に、0から9までの任意の数字:
let str = 'xax x1x x3x x5x x@x';
let res = str.replace(/x[0-9]x/g, '!');
結果、変数には次の内容が書き込まれます:
'xax ! ! ! x@x'
例
この例の検索パターンは次の通りです:
xの間に、3から7までの任意の数字:
let str = 'xax x1x x3x x5x x@x';
let res = str.replace(/x[3-7]x/g, '!');
結果、変数には次の内容が書き込まれます:
'xax x1x ! ! x@x'
例
この例の検索パターンは次の通りです:
xの間に、'a'から'z'までの任意の文字、または1から9までの任意の数字:
let str = 'xax x1x x3x x5x x@x';
let res = str.replace(/x[a-z1-9]x/g, '!');
結果、変数には次の内容が書き込まれます:
'! ! ! ! x@x'
例
この例の検索パターンは次の通りです:
xの間に、'a'から'z'までの任意の文字、または'A'から'Z'までの任意の文字:
let str = 'xax xBx xcx x5x x@x';
let res = str.replace(/x[a-zA-Z]x/g, '!');
結果、変数には次の内容が書き込まれます:
'! ! ! x5x x@x'
例
この例の検索パターンは次の通りです:
xの間に、'a'から'z'までの任意の文字、または数字1、2:
let str = 'xax xbx x1x x2x x3x';
let res = str.replace(/x[a-z12]x/g, '!');
結果、変数には次の内容が書き込まれます:
'! ! ! ! x3x'
例
この例の検索パターンは次の通りです:
xの間に、'a'から'z'までの文字が1文字以上存在する:
let str = 'xx xabesx xaadx x123x xa3x';
let res = str.replace(/x[a-z]+x/g, '!');
結果、変数には次の内容が書き込まれます:
'xx ! ! ! x123x xa3x'
例
文字数がゼロの場合も許容するように変更してみましょう:
let str = 'xx xabesx xaadx x123x xa3x';
let res = str.replace(/x[a-z]*x/g, '!');
結果、変数には次の内容が書き込まれます:
'! ! ! ! x123x xa3x'
実践問題
次の文字列が与えられます:
let str = 'aba aea aca aza axa';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間に文字'b'、'e'、または'x'が存在する。
次の文字列が与えられます:
let str = 'a1a a3a a7a a9a aba';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間に3から6までの数字が存在する。
次の文字列が与えられます:
let str = 'aba aea afa aha aga';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間にaからgまでの文字が存在する。
次の文字列が与えられます:
let str = 'aba aea afa aha aga';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間にaからf、およびjからzまでの文字が存在する。
次の文字列が与えられます:
let str = 'aAa aea aEa aJa a3a';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間にaからf、およびAからDまでの文字が存在する。
次の文字列が与えられます:
let str = 'aAXa aeffa aGha aza ax23a a3sSa';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間に小文字のラテン文字が存在する(他の部分には影響を与えない)。
次の文字列が与えられます:
let str = 'aAXa aeffa aGha aza ax23a a3sSa';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間に小文字および大文字のラテン文字が存在する(他の部分には影響を与えない)。
次の文字列が与えられます:
let str = 'aAXa aeffa aGha aza ax23a a3sSa';
次のパターンに一致する正規表現を記述してください:
両端に文字'a'があり、その間に小文字のラテン文字および数字が存在する(他の部分には影響を与えない)。