正規表現を使いこなす

[abc] の使い方

[ ]で囲まれた文字列は文字クラスと呼ばれます。この文字列に含まれるいずれかの一文字にマッチングします。
任意の一文字ではなく、指定したある範囲の文字中の一文字にだけマッチングさせたい場合に使用します。
この実験では、match()メソッドによりマッチングするかどうかだけを見ます。
当然、search()やreplace()メソッドにより位置検索や置換も可能です。

「[def]」は、「d」、「e」、あるいは「f」のいずれかにマッチします。
// 検索対象文字列
var str1 = "abcdefghijk";
var str2 = "abceeeghijk";
var str3 = "abcfffghijk";
// 検索実行および結果出力
document.write("「abcdefghijk」の「[def]」による結果: ", str1.match(/[def]/));
document.write("<br>「abceeeghijk」の「[def]」による結果: ", str2.match(/[def]/));
document.write("<br>「abcfffghijk」の「[def]」による結果: ", str3.match(/[def]/));
実行結果:


「-」(ハイフン)は範囲を表し、「[d-h]」は「defgh」と同様です。
「[0-9]」は1桁の数字にのみマッチングします。これは「[0123456789]」と同じです。
数字の並びは「[0-9]+」とします。「+」は直前文字(数字)の1回以上の繰り返しという意味です。
ここで、「\」を「\\」と記述しているのは「\」がメタ文字であるため、「\」を付けて通常の文字であることを指定しなければなりません。
// 検索対象文字列
var str = "abc\123,456xyz";
// 検索実行および結果出力
document.write("「[0-9]」による結果: ", str.match(/[0-9]/));
document.write("<br>「[0-9]+」による結果: ", str.match(/[0-9]+/));
document.write("<br>「\\[0-9]+」による結果: ", str.match(/\\[0-9]+/));
document.write("<br>「\\[0-9,]+」による結果: ", str.match(/\\[0-9,]+/));
実行結果:


文字クラスの先頭に「^」を付けると、次に続く文字リストに含まれていない任意の一文字にマッチングします。
// 検索対象文字列
var str = "abc\123,456xyz";
// 検索実行および結果出力
document.write("「[0-9]」による結果: ", str.match(/[0-9]/));
document.write("<br>「[0-9]+」による結果: ", str.match(/[0-9]+/));
document.write("<br>「\\[0-9]+」による結果: ", str.match(/\\[0-9]+/));
document.write("<br>「\\[0-9,]+」による結果: ", str.match(/\\[0-9,]+/));
実行結果:


どうしてこのような結果になるのか、理解できますか?

戻る