エンコード
正規表現エスケープ
正規表現で特別な意味を持つメタ文字 (. * + ? ^ $ { } ( ) | [ ] \) をバックスラッシュでエスケープし、リテラルとしてマッチさせます。new RegExp() にユーザー入力を渡す前に使ってください。
サンプル
直近の入力
全履歴 ·
履歴はあなたのブラウザにのみ保存されます。サーバーに送信されません。 設定
こんなときに使う
ユーザー検索クエリで部分一致
検索ボックスから来る文字列をそのまま new RegExp() に渡すと、. や * が誤動作します。本ツールでエスケープ。
URL を正規表現で見つける
URL 文字列に . / : ? が含まれるので、テンプレートに埋める前にエスケープが必要です。
ファイル拡張子で動的フィルタ
「.txt で終わる」を表現したいとき、. をリテラルにする必要があります。本ツールでまず . を \. に。
テキスト中の特定キーワードを置換
String.prototype.replace に正規表現を渡す場合、検索文字列に [ や ( が含まれるとエラーや誤マッチに。
シェル glob → 正規表現変換の前段
glob のメタ文字(*, ?)と正規表現のメタ文字は違います。glob のメタ以外をリテラル化してから glob 用ロジックを乗せます。
ロケール依存の特殊文字
通貨記号 ¥ や日本語の括弧()は正規表現の特殊文字ではありませんが、ASCII 括弧 () は特殊。エスケープが必要かを確認するときに。
よくあるエラーと対処
ERR
new RegExp(input) で SyntaxError - 原因
- input に [ や ( などが含まれて、対応する閉じカッコがない場合に正規表現のパース時にエラーになります。
- 対処
- 事前に本ツールでエスケープしてから new RegExp() に渡してください。
ERR
意図しないパターンマッチ - 原因
- . が任意の 1 文字、* が直前の 0 個以上の繰り返し、と特殊解釈されます。
- 対処
- リテラルとして検索したい全文字列を本ツールでエスケープ。
ERR
アンエスケープしたら意図と違う文字列に - 原因
- 正規表現で意味のある \d \w などの特殊シーケンスもアンエスケープすると壊れます。
- 対処
- 本ツールは「メタ文字 + バックスラッシュ」のみアンエスケープします。\d などはそのまま残ります。
ERR
/ をエスケープすべきか分からない - 原因
- リテラル形式 /.../ では / もエスケープが必要ですが、new RegExp() ではエスケープ不要。
- 対処
- 本ツールはエスケープしません。リテラル形式に貼るときだけ手動で \/ にしてください。
CLI / 他言語でやる方法
Node.js
node -e "const e = s => s.replace(/[.*+?^\${}()|[\\]\\\\]/g, '\\\\\$&'); console.log(e('a.b*c'))" ECMAScript には標準のエスケープ関数がないので自前実装が一般的。
Python re.escape
python -c "import re; print(re.escape('a.b*c'))" 標準ライブラリ。Python 3.7+ では英数字以外をすべてエスケープしないように改善済み。
Lodash escapeRegExp
_.escapeRegExp('a.b*c') ECMAScript 提案の Polyfill としてよく使われる。
よくある質問
▶ どの文字をエスケープしますか?
. * + ? ^ $ { } ( ) | [ ] \ の 14 文字です。これらは ECMAScript 正規表現の特殊文字。
▶ アルファベットや数字はエスケープしない理由
\a や \b は別の意味(\b は単語境界)を持つため、無闇にエスケープすると壊れます。安全なのはメタ文字のみ。
▶ / をエスケープしないのはなぜ?
正規表現リテラル /.../ の区切り文字なので、リテラル形式で使う場合のみエスケープが必要です。new RegExp() に渡す場合は不要なため、本ツールでは扱いません。
▶ アンエスケープは何のために?
エスケープ済みパターンから元の文字列を取り出したいときに使います。例:DB に保存した検索条件のメタ文字を表示する場面。
▶ PCRE / Ruby 正規表現でも使える?
メタ文字のセットが少し違います(PCRE は - や # を文脈によりエスケープする)。本ツールは ECMAScript 仕様準拠。他方言は受け取り側のドキュメントで確認してください。
▶ ユーザーが正規表現を入力するときは?
ユーザーが意図的にパターンを書くなら本ツールでエスケープしてはいけません(リテラル化されてしまう)。「キーワード検索」のように完全一致したい場合だけエスケープします。
▶ Unicode の特殊文字 \p{...} を含むパターンの扱い
本ツールは ASCII の 14 メタ文字のみエスケープします。\p{...} のような Unicode プロパティ表記をリテラル化したい場合は別途処理が必要です。
▶ サーバーに送信されますか?
送信されません。replace の 1 行で完結します。