正規表現の特殊文字をエスケープして文字列をそのまま検索
どんなテキストも正規表現に安全に入れられます。invoice.total [draft]? は invoice\.total \[draft\]\? になり、ピリオド、角かっこ、疑問符は命令として働かず、その文字そのものに一致します。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
リテラル文字列を正規表現へそのまま挿入できるとは限りません。ピリオド、疑問符、角括弧、バックスラッシュなどは正規表現構文の命令として扱われるため、エスケープしていない値は意図しない文字列に一致したり、パターン自体を無効にしたりします。この機能は、文字列をECMAScriptパターンの断片へ変換し、すべての正規表現メタ文字を文字どおりに扱えるようにします。検索語、ファイル名、識別子、ラベル、利用者が入力した値などを、意味を変えずに大きな正規表現へ組み込む場合に便利です。
リテラル文字列を安全なパターン断片へ変換します
結果のescapedには、ECMAScript正規表現の各メタ文字の前へバックスラッシュを付けたパターン断片が入ります。通常の英数字、空白、正規表現上の意味を持たない句読点、改行、Unicode文字は変更されません。たとえば通常のピリオドは任意の1文字を表しますが、エスケープされたピリオドは実際のピリオドだけを表します。
丸括弧はグループを作り、角括弧は文字クラスを開始し、波括弧は繰り返し回数を指定することがあります。また、疑問符やアスタリスクは繰り返しを制御します。これらをエスケープすることで、元の値が持つ文字どおりの意味を保てます。
返される断片にはスラッシュ区切りやフラグが含まれないため、RegExpコンストラクターへ直接渡すほか、大きなパターンへ埋め込んだり、パターン本体として保存したりできます。空文字列も有効であり、変換する文字がないため空のescaped値が返されます。
意図した正規表現構文と安全に組み合わせます
パターンの一部がデータから来て、別の部分を意図的な正規表現構文として記述する場合に、エスケープは特に役立ちます。たとえば、利用者が入力した商品コードを行頭だけで検索するアプリケーションを考えます。最初に商品コードをエスケープし、その後で行頭アンカーや必要な境界条件を追加してください。
この分離により、信頼できるパターン構造とリテラルデータを明確に区別できます。組み立てた後のパターン全体をエスケープしてはいけません。意図して有効にしたアンカー、グループ、選択肢、量指定子まで無効になるためです。
出力はJavaScriptソースコード表記ではなく、ECMAScriptパターン本体を対象とします。この違いは重要です。 スラッシュはRegExpコンストラクター内では特殊文字ではないため、そのまま残ります。生成したJavaScriptソースのスラッシュ区切り正規表現リテラルへ結果を入れる場合、ソースレベルの区切り文字エスケープは別の処理です。
通常のアプリケーションコードでは、返された文字列をnew RegExpへ渡し、フラグは別に指定する方法が適しています。
保証範囲を理解し、周囲の設計も検証します
この変換は決定的かつ線形です。入力された文字列を一度走査し、ECMAScript正規表現構文を制御する文字の前へバックスラッシュを追加します。ネットワークは利用せず、生成した式を実行せず、フラグやアンカーも追加しません。
大文字と小文字を区別するかどうかも決定しません。それらはリテラルとしての安全性ではなく一致動作を変えるため、周囲のアプリケーションで選択してください。組み立て後は、完全なパターンを代表的な一致例と不一致例でテストしてください。
特に、エスケープ済み断片の周囲へ省略可能部分や選択肢を追加した場合は重要です。
活用例
文字どおりの検索を作成
検索語を正規表現に安全な断片へ変換してから、意図したアンカーやフラグを追加できます。
ファイル名や識別子を照合
ピリオド、括弧、プラス記号などの構文文字を、正確な値の一部として維持できます。
動的なパターン構築を保護
利用者が入力した文字列はリテラルのまま保ち、信頼できるコードだけで周囲の正規表現構造を定義できます。
よくある質問
どの文字がエスケープされますか?
バックスラッシュ、キャレット、ドル記号、ピリオド、縦線、疑問符、アスタリスク、プラス記号、丸括弧、角括弧、波括弧が対象です。
出力に正規表現の区切り文字は含まれますか?
いいえ。 エスケープ済みの値は、前後にスラッシュ区切りを持たないECMAScriptパターン本体または断片です。
スラッシュをエスケープしないのはなぜですか?
RegExpコンストラクターへ渡すECMAScriptパターンでは特殊文字ではないためです。JavaScript生成時のソース区切り文字のエスケープは別の処理です。
アンカーやフラグを追加できますか?
はい。 エスケープ済み断片の周囲へ意図した正規表現構文を追加し、完全な式を構築するときにフラグを別途指定してください。
空文字列を渡すとどうなりますか?
有効な入力として受け付け、長さ0のリテラルを表す空のescaped値を返します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/regex-special-char-escape \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"invoice.total (USD) [draft]?"}'const res = await fetch("https://api.kit.forhosting.com/dev2/regex-special-char-escape", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "invoice.total (USD) [draft]?"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/regex-special-char-escape",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "invoice.total (USD) [draft]?"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/regex-special-char-escape", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"invoice.total (USD) [draft]?"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"invoice.total (USD) [draft]?"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/regex-special-char-escape", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "invoice.total (USD) [draft]?"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.regex_special_char_escape",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
リテラル文字列を安全なパターン断片へ変換します
正規表現で一致させたい値を、そのままtextフィールドへ入力してください。
保証範囲を理解し、周囲の設計も検証します
また、この機能はプログラミング言語の文字列リテラル、JSON文書、シェルコマンド、HTML属性、URL向けのクォート処理を行いません。それぞれに固有のエスケープ規則があるため、正規表現のエスケープと併用するときは、各層を正しい境界で適用する必要があります。文字列以外の入力は変換せずinvalid_inputエラーとして拒否するため、数値、配列、オブジェクト、null、真偽値が意図しないパターン文字列へ暗黙変換されることはありません。APIリクエストには公開基本料金$0.002が適用されます。
技術的な質問
textが文字列でない場合はどうなりますか?
リクエストはinvalid_inputエラーになります。値を暗黙に文字列へ変換することはありません。
APIリクエストの料金はいくらですか?
APIの基本料金は1リクエストあたり$0.002です。同じ決定的な処理をブラウザーでも実行できます。