正規表現の名前付きキャプチャグループを抽出
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) のようなパターンを貼り付けると、year、month、day の順に名前付きグループが分かります。検証はしても実行はしないので、資料作りや置換の準備に使えます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- パターン
- (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
- 名前付きグループ
- year, month, day
- 数量
- 3
<name>...) を好みます。本機能は単一の ECMAScript 正規表現本体を受け取り、コンパイル可能かを検証し、宣言されている名前付きキャプチャグループ識別子を定義順の一覧で返します。名前付きグループがないパターンはエラーではなく空リストで成功します。
名前付きキャプチャグループとは何か、一覧が役立つ理由
ECMAScript の正規表現では、名前付きキャプチャグループは開き括弧、疑問符、小なり、識別子、大なり、部分パターン、閉じ括弧の順に書きます。
例として open-paren question-mark less-than year greater-than backslash-d open-brace four close-brace close-paren があります。
マッチが成功すると、エンジンはそれらの名前を groups オブジェクトに載せ、呼び出し側は match[1] ではなく match.groups.year を読めます。
マッチを走らせずに名前を列挙することは、パターンを文書化するとき、バリデータ向けに TypeScript 型を生成するとき、dollar-less-than name greater-than のような置換トークンを出す UI を作るときに役立ちます。パターンを検証し、左から右への定義順で名前だけを抽出します。
無名のキャプチャグループと非キャプチャグループは名前一覧から無視されます。question-mark less-than equals または question-mark less-than exclamation で始まる lookbehind は名前付きグループとして扱いません。
文字クラスとエスケープされた括弧は偽陽性を出さないため、角括弧内に名前付きグループ開始と同じ文字が並んでいても結果には出ません。
活用例
正規表現ライブラリの自動文書化
共有ライブラリ内の各パターンについて名前付きキャプチャグループ識別子の表を生成し、ドキュメントをソースと同期させます。
よくある質問
lookbehind は名前付きグループとして扱われますか?
いいえ。(? <=...)や (? <!...) のアサーションはスキップされます。一覧に出るのは (? <name>...)キャプチャグループだけです。
名前付きグループがないパターンではどうなりますか?
エラーにはならず、空の一覧と0という件数が返ります。拒否されるのは、構文が壊れているなど、正規表現エンジン自体が受け付けないパターンだけです。
パターンをテキストに当てて試しますか?
いいえ。パターンが有効かどうかを確かめ、名前を左から右へ、宣言された順に読み取るだけです。一致の検索はしないので、例文は必要ありません。
同じ名前のグループを2つ使えますか?
いいえ。現在のエンジンは、パターンをコンパイルする時点で重複した名前を拒否します。そのため、同じ名前が2回並んだ一覧を返すのではなく、分かりやすいメッセージで問題をお知らせします。
名前のないグループや角かっこ内の文字も数えますか?
いいえ。通常の番号付きグループと非キャプチャグループは一覧に入りません。角かっこの中の文字やエスケープされたかっこも、グループの始まりに見えても名前として誤って拾われることはありません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/regex-named-group-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pattern":"(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"}'const res = await fetch("https://api.kit.forhosting.com/dev/regex-named-group-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pattern": "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/regex-named-group-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pattern": "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/regex-named-group-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pattern":"(?<year>\\\\d{4})-(?<month>\\\\d{2})-(?<day>\\\\d{2})"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pattern":"(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/regex-named-group-extract", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"pattern": "(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.regex_named_group_extract",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
名前付きキャプチャグループは、不透明なマッチインデックスを year、month、email_local のような読みやすいフィールド名に変えます。そのため現代の正規表現ライブラリや API バリデータは、番号付きグループだけより (?長いパターンを引き継いだり、ドキュメントを生成したり、フォームパーサを組み込んだりするとき、置換テンプレートを書く前やグループを JSON に写す前に、パターンが実際に定義している名前の一覧が必要になることがよくあります。エンジンが拒否する構文だけが invalid_input になります。
名前付きキャプチャグループとは何か、一覧が役立つ理由
本エンドポイントはサンプル文字列に対して正規表現を実行しません。重複名は現行 ECMAScript エンジンではコンパイル時に失敗し、明確なメッセージ付きの invalid_input になります。
入力契約、応答形、エラー時のふるまい
pattern はスラッシュなしの正規表現本体です。値は空でない最大一万文字の文字列でなければなりません。ハンドラはネイティブの RegExp コンストラクタでコンパイルします。空の pattern、欠落、非文字列型はコンパイル前の検証で失敗します。必須の文字列フィールド pattern を1つ持つ JSON 本体を POST してください。構文エラー、未終了のクラス、不正な量指定子、重複するキャプチャグループ名はすべて invalid_input となり課金されません。成功時は pattern をエコーし、定義順の文字列配列 named_groups、配列長の count、便利な真偽フラグ has_named_groups を返します。例として year、month、day の3つの名前付きグループを持つ日付パターンは count が3、has_named_groups が true になります。backslash-w plus のような単純な単語マッチャで名前付きグループがない場合は、空の named_groups、count ゼロ、has_named_groups false となり、パターン自体は有効なので成功呼び出しのままです。素早い確認には無料のブラウザツールを、設定ファイル内の各パターンについて機械可読なグループ名一覧が必要な CI パイプラインや CMS プラグインには API をご利用ください。
名前付きグループ抽出が本領を発揮する場面
正規表現ライブラリを公開するドキュメントサイトやスタイルガイドは、手作業の並行リストがずれることなく、パターンごとにグループ名の表を自動生成できます。ユーザー提供のパターンを受け付けるフォームビルダやログパーサは、パターンに存在しない dollar-less-than name greater-than トークンを参照するテンプレートを拒否でき、実行時の驚きを減らせます。検証失敗は残高を消費しません。セキュリティレビューのチェックリストは、検証用正規表現がどのフィールドを捕捉するかをしばしば尋ねます。小さな parse API から名前一覧を返す方が、プルリクエストごとに本格的な正規表現デバッガを立てるより安価です。
連携の活用例
置換テンプレートの検証
$<name> トークンを使う replace ルールを保存する前に、各名前がパターンの named_groups 一覧に存在することを確認します。
フォームとログ向け CI チェック
設定の正規表現が email や order_id を捕捉すると主張しているのに対応する名前付きグループがない場合、パイプラインを失敗させます。
技術的な質問
正規表現から名前付きキャプチャグループをどう抽出しますか?
pattern に ECMAScript 正規表現本体(スラッシュなし)を入れた JSON を送ります。API は定義順の named_groups と count、has_named_groups を返します。
パターンが無効な場合はどうなりますか?
タスクは invalid_input で失敗し、メッセージにエンジンエラーが含まれます。無効なパターンは課金されません。
名前付きグループがないパターンはエラーになりますか?
いいえ。番号付きまたは非キャプチャのみの有効なパターンは、空の named_groups と count ゼロで成功します。
名前付きグループ抽出の料金はいくらですか?
ブラウザツールは無料です。API 要求は成功呼び出しごとに前払い KIT 残高から $0.002 です。無効入力は課金されません。