stringObj.match(rgExp)
例えば、次のように使います。
var str = "abcabb";
alert(str.match(/ab/g)); //ab,ab
上の例では一番前と後の方の2ヶ所でマッチして長さ2の配列が返ります。
var str = "abcabb";
var rgexp = new RegExp("a(b)+", "g");
alert(str.match(rgexp)); //ab,abb
alert(RegExp.$1); //b
カッコでサブマッチさせるときで、
g フラグが立っていない場合は特別で、
返ってくる配列は、
マッチした文字列全体, サブマッチ1, サブマッチ2,...
となります。
var a = "a1 a2 a34 a567".match(/a(\d+) a(\d+)/);
alert(a); //a1 a2,1,2
g フラグが立っているときは他と同じように
マッチした全体の配列が返りますが、
サブマッチは最後のマッチに関するものが
RegExp に記憶されます。
var a = "a1 a2 a34 a567".match(/a(\d+) a(\d+)/g);
alert(a); //a1 a2,a34 a567
alert(RegExp.$1 + "," + RegExp.$2); //34,567
stringObj.search(rgExp)
マッチしなかった場合は -1 を返します。
indexOf メソッドの正規表現版だと思ってください。
var rgexp = new RegExp("a(b)+", "g");
alert("abcabb".search(rgexp)); //0
alert("acbacb".search(rgexp)); //-1
stringObj.split(rgExp[,limit]) stringObj.split(stringObj[,limit])JavaScript1.1 では Regular Expression オブジェクトは使えません。
var str = "1/16/2000 16:41:12"; alert(str.split(" ")); //1/16/2000,16:41:12 alert(str.split(/[\/ :]/)); //1,16,2000,16,41,122つ目の例は、"/"か" "か":"のどれかで分割して、 結局長さ6の Array オブジェクトを返しています。
JavaScript1.2 以上では返る Array の長さを制限できます。
var str = "1/16/2000 16:41:12"; alert(str.split(/[\/ :]/, 2)); //1,16上の例では Array オブジェクトの要素を2つに限っています。
ネスケでは正規表現の中にパレーンを使うと、 そのパレーン内にマッチした文字列も配列の要素として返ります。
alert("11 : 12".split(/\s+(:)\s+/)) //["11",":","12"]
ネスケで<SCRIPT>タグで JavaScript1.2を指定すると、
split(" ") としたときに限り
重なったスペースや改行といったホワイトスペースは
1つのスペースとみなされて split されます。
前後のホワイトスペースは無視されます。
alert(" a \t\nb ".split(" ")); //["a","b"]
IE では正規表現を引数にすると重なった文字列は1つとみなされて
split されます。
前後のスペースは無視されます。
alert(" a b ".split(/ /)); //a,b
stringObj.replace(rgExp, replaceText])
正規表現にマッチした部分を指定した文字列に置き換えます。
RegExp オブジェクトに結果が反映されます。
対象の String オブジェクトに影響はありません。
var str = "ほえほえハッピー"; //str.replace(/ほえ/g, "ほげ")とやりたいんだけど //なぜかネスケではうまくいかない var rgexp = new RegExp("ほえ", "g"); alert(str.replace(rgexp, "ほげ")); //"ほげほげハッピー" alert(str); //"ほえほえハッピー"置換する文字列には検索の結果を使うことができます。
var str = "第8号 第256号"; alert(str.replace(/第(\d+号)/g, "$1")); //8号 256号第n号をn号に置換します。 $1 をダブルクォートで囲んで、RegExp.$1 の内容とします。
var str = "1/16/2000 16:41:12"; var rgexp = /(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)/; var repl = "$3年$1月$2日 $4時$5分$6秒"; alert(str.replace(rgexp, repl)); //2000年1月16日 16時41分12日実はもっと複雑な置換を行うことができるのですが、 それは 正規表現(3) で取り扱っています。