JavaScriptでの正規表現マッチング

JavaScriptでの正規表現マッチング

このページでは、JavaScriptにおける正規表現を用いた文字列マッチング方法を詳しく解説します。以下の各セクションにジャンプできます。

regexp.exec()

regexp.exec()は、正規表現に基づいて文字列を検索し、マッチした最初の結果を配列として返します。繰り返し実行することで、次のマッチを取得できます。

使用例

// 正規表現を定義
const regex = /(\d+)/g;
const str = "123 and 456";

// 1回目の検索
let match = regex.exec(str);
console.log(match); // ["123", "123", index: 0, input: "123 and 456", groups: undefined]

// 2回目の検索
match = regex.exec(str);
console.log(match); // ["456", "456", index: 8, input: "123 and 456", groups: undefined]

// 3回目の検索(結果なし)
match = regex.exec(str);
console.log(match); // null

このように、exec()は正規表現のgフラグ(グローバル)を利用することで繰り返しマッチを探せます。

注意点

正規表現がグローバルフラグを持っている場合、exec()は内部状態を保持します。そのため、ループを使うことも可能です。

const regex = /(\d+)/g;
const str = "123 and 456";
let match;

while ((match = regex.exec(str)) !== null) {
    console.log(`Matched: ${match[0]}, Index: ${match.index}`);
}
// Matched: 123, Index: 0
// Matched: 456, Index: 8

str.match()

str.match()は文字列に対して正規表現を適用し、マッチした結果を返します。正規表現にgフラグがある場合とない場合で挙動が異なります。

使用例

グローバルフラグがない場合、最初のマッチを配列で返します。

const str = "123 and 456";
const match = str.match(/(\d+)/);
console.log(match); // ["123", "123", index: 0, input: "123 and 456", groups: undefined]

グローバルフラグがある場合、すべてのマッチを配列で返します。

const str = "123 and 456";
const matches = str.match(/(\d+)/g);
console.log(matches); // ["123", "456"]

regexp.test()

regexp.test()は正規表現を文字列に適用し、一致するものがあればtrueを、なければfalseを返します。

使用例

const regex = /\d+/;
console.log(regex.test("123")); // true
console.log(regex.test("abc")); // false

test()は特に条件分岐で利用されることが多いです。

const regex = /\d+/;
const input = "Value: 42";
if (regex.test(input)) {
    console.log("数字が含まれています");
} else {
    console.log("数字は含まれていません");
}

regexp.compile()(非推奨)

regexp.compile()は既存の正規表現を再コンパイルするためのメソッドですが、現在では非推奨です。代わりに新しい正規表現オブジェクトを作成することが推奨されます。

非推奨の例

const regex = /\d+/;
regex.compile("\\w+"); // 非推奨
console.log(regex.test("abc")); // true

推奨される代替方法

const regex = new RegExp("\\w+");
console.log(regex.test("abc")); // true

str.matchAll()

str.matchAll()は、すべてのマッチ結果をイテレーターとして返します。gフラグが必要で、各マッチの詳細情報を扱うことができます。

使用例

const str = "123 and 456";
const regex = /(\d+)/g;
const matches = str.matchAll(regex);

for (const match of matches) {
    console.log(`Matched: ${match[0]}, Index: ${match.index}`);
}
// Matched: 123, Index: 0
// Matched: 456, Index: 8

matchAll()exec()に似ていますが、イテレーターを使用してすべての結果を一度に取得するため、for...ofループやArray.from()で処理しやすいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です