JavaScriptで正規表現を使う時、いつも使い方を忘れて、ネットを調べるはめになるので、ここにまとめておきます。

String.match()メソッド *

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オプションをつけないときは以下の通り。

  • [0]にはマッチした部分文字列
  • [1]以降には、(...)で抽出した文字列 (RegExp.$1 ... と同じ)

gオプションをつけると、マッチした部分を全部配列で返します。

test()メソッドは、単にマッチするかどうかをBooleanで返します。

RegExpオブジェクトを使う方法 *

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()メソッド *

文字列を置換する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
  • ¥xXX / ¥uXXXX のように書くと文字コード指定が可能

参考になるサイト *