m moji kit v1.0.9
\.
エンコード

正規表現エスケープ

正規表現で特別な意味を持つメタ文字 (. * + ? ^ $ { } ( ) | [ ] \) をバックスラッシュでエスケープし、リテラルとしてマッチさせます。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 行で完結します。

関連ツール