JavaScriptで文字列から特定のパターンを検索する際、正規表現の`exec()`メソッドは非常に強力なツールです。この記事では、`exec()`メソッドの基本的な使い方から実践的な例まで、わかりやすく解説します。
exec()メソッドとは
`exec()`メソッドは、正規表現オブジェクトのメソッドで、文字列に対してパターンマッチングを行います。マッチした結果を配列として返し、マッチしない場合は`null`を返します。
基本的な使い方
const regex = /pattern/;
const result = regex.exec('検索対象の文字列');戻り値の構造
`exec()`メソッドが返す配列には以下の情報が含まれます:
- `[0]`: マッチした文字列全体
- `[1]`, `[2]`, ...: 括弧でグループ化された部分マッチ
- `index`: マッチした位置
- `input`: 元の文字列
実践的な例
例1:基本的なマッチング
const regex = /Hello/;
const result = regex.exec('Hello World');
console.log(result[0]); // 出力: "Hello"
console.log(result.index); // 出力: 0例2:グループ化を使用した例
const regex = /(\d{4})-(\d{2})-(\d{2})/;
const result = regex.exec('2024-02-15');
console.log(result[0]); // 出力: "2024-02-15"
console.log(result[1]); // 出力: "2024"
console.log(result[2]); // 出力: "02"
console.log(result[3]); // 出力: "15"例3:グローバルフラグを使用した連続マッチング
const regex = /\d+/g;
const str = "123 456 789";
let match;
while ((match = regex.exec(str)) !== null) {
console.log(match[0]); // 順番に "123", "456", "789" を出力
}よくある注意点
1. グローバルフラグ(`g`)を使用する場合、`exec()`は前回のマッチ位置を記憶します
2. マッチしない場合は`null`が返されるため、必要に応じて null チェックを行いましょう
3. 無限ループを避けるため、グローバルフラグ使用時は while ループの条件を適切に設定する
パフォーマンスの考慮
大量のテキストを処理する場合は、以下の点に注意が必要です:
- 複雑な正規表現パターンは処理時間が増加する可能性があります
- 可能な限り具体的なパターンを使用することで、パフォーマンスを改善できます
まとめ
`exec()`メソッドは、JavaScriptで正規表現を使用する際の強力なツールです。基本的な使い方を理解し、適切に使用することで、効率的な文字列処理が可能になります。
// 実用的な例:メールアドレスの検証
const emailRegex = /([a-zA-Z0-9._-]+)@([a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/;
const result = emailRegex.exec('user@example.com');
if (result) {
console.log('ユーザー名:', result[1]); // "user"
console.log('ドメイン:', result[2]); // "example.com"
}以上で、JavaScriptの`exec()`メソッドについての解説を終わります。この記事で学んだ内容を活用して、効果的な文字列処理を実装してください。