matchとexecは、グローバルオプション「g」が無い場合には同じ結果を返します。しかしグローバルオプション「g」がある場合には、それぞれ異なる結果を返します。
グローバルオプション「g」がある場合には、
matchは文字列のすべてを検索しすべてのマッチを配列で返します。execはlastIndex以降の「最初のマッチのみ」を返します。またexecを実行するたびにlastIndexの値を書き換えます。
matchはmatchを1回実行し、結果オブジェクトを繰り返し処理をするという使い方をします。
var reg = /(\d{6})/g; var str = "123123444456789789456"; var results = str.match(reg); for (var i = 0; results.length > i; i++) { alert(results[i]); } 実行結果
123123 444456 789789 execはexecを繰り返し実行しながら、同時に結果オブジェクトを処理するという使い方をします。
var reg = /(\d{6})/g; var str = "123123444456789789456"; var result; while (result = reg.exec(str)) { alert(RegExp.lastMatch); } 実行結果
123123 444456 789789 文字列を全量処理する場合にはmatchのほうが若干高速になります。
しかし例えば「3つ目のマッチでのみ処理を行なう」など、文字列の途中までしか処理しない場合にはexecを使うといいでしょう。
また、次のようなケースではexecが有効になります。
「123123444456789789456」という文字列の中から数字が6文字並ぶすべてのパターンを抽出する場合。
var reg = /(\d{6})/g; var str = "123123444456789789456"; var result; while (result = reg.exec(str)) { alert(RegExp.lastMatch); reg.lastIndex -= 5; } 実行結果
123123 231234 312344 123444 234444 344445 444456 444567 445678 456789 567897 678978 789789 897894 978945 789456 |
Code Tips > JavaScript正規表現 >