JavaScriptで正規表現を使う時、いつも使い方を忘れて、ネットを調べるはめになるので、ここにまとめておきます。
match()メソッドを使うと、正規表現にマッチする文字列を調べることができます。
見つからないと、nullを返します。以下のように、全て検索「g」をつけると、配列にマッチした箇所を返します。
var target_string = "***(2012-03-18)***"; var matched = target_string.match(/\d+/g); if (matched) { alert(matched.length + "個のマッチ"); for (var i = 0; i < matched.length; i++) { alert("[" + matched[i] + "]"); } }
ところで、match()の戻り値については忘れがち。gオプションをつけないときは以下の通り。
gオプションをつけると、マッチした部分を全部配列で返します。
test()メソッドは、単にマッチするかどうかをBooleanで返します。
var target_string = "***(2012-03-18)***"; var re_str = "\d+"; var re = new RegExp(re_str, "g"); var matched = target_string .match(re); if (matched) { alert(matched.length + "個のマッチ"); for (var i = 0; i < matched.length; i++) { alert("[" + matched[i] + "]"); } }
文字列を置換するString.replace()メソッドは、かなり多機能です。
最初の一個を置換します。
var str = "abcabc"; alert(str.replace("a", "*")); // *bcabc
全てを置換したい場合は、正規表現で"g"オプションをつけます。
var str = "abcabc"; alert(str.replace(/a/g, "*")); // *bc*bc
どうしても正規表現を使わず、全ての文字列を変換したい場合、split()、join()メソッドを使えます。
var str = "abcabc"; alert(str.split("a").join("*")); // *bc*bc
replace()の第一引数に正規表現を、第二引数にコールバック関数を指定すると、かなり細かい処理が可能。
var str = "abcabc"; str = str.replace(/a/g, function(m){ return "*"; }); alert(str); // *bc*bc
第一引数の正規表現部分には、RegExpオブジェクトを指定可能。
var re = new RegExp("a", "g"); var str = "abcabc"; str = str.replace(re function(m){ return "*"; }); alert(str); // *bc*bc