1. ホーム
  2. javascript

[解決済み] JavaScriptにRegExp.escape関数はありますか?

2022-03-19 14:20:47

質問

任意の文字列から正規表現を作りたいだけなのですが。

var usersString = "Hello?!*`~World()[]";
var expression = new RegExp(RegExp.escape(usersString))
var matches = "Hello".match(expression);

そのためのビルトインメソッドはあるのでしょうか?ない場合、みんなは何を使っているのでしょうか?Rubyには RegExp.escape . 自分で書く必要はないような気がします。何か標準的なものがあるはずです。

解決方法は?

他の回答でリンクされている関数が不十分です。それは、エスケープするために失敗します。 ^ または $ (文字列の先頭と末尾)、または - 文字列の中で範囲に使用されます。

この機能を使用します。

function escapeRegex(string) {
    return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}

一見すると不要に思えるかもしれませんが、エスケープすることで - (と同様に ^ この関数は、正規表現の本体だけでなく、文字クラスに挿入される文字のエスケープにも適しています。

エスケープ / は、後で評価するためにJavaScriptの正規表現リテラルで使用する文字のエスケープに適した関数です。

どちらをエスケープしてもデメリットがないため、より広いユースケースをカバーするためにエスケープするのが理にかなっています。

そして、そう、これが標準的なJavaScriptの一部でないことは残念な失敗です。