23

Perl の正規表現では、メタ文字が含まれている場合でも、その部分式をリテラル文字列として一致させることを示すために、部分式を\Qandで囲むことができます。\Eまたquotemeta、文字列に正確に正しい数のバックスラッシュを挿入する関数もあるため、後でその文字列を正規表現に補間すると、その内容に関係なく文字どおりに一致します。

Javascript (主要なブラウザーに展開されている)には同等の機能が組み込まれていますか? 私は自分で問題なく書くことができますが、気にする必要がないかどうか知りたいです。

4

3 に答える 3

19

そのような組み込み機能はありません。

独自に実装するのではなく、インターネットで利用できる多数の正規表現エスケープ関数を調べることをお勧めします。

そのページでは、次の解決策を提案しています ( Colin Snoverによる):

RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

またはXRegExpライブラリを使用することをお勧めします。

于 2011-06-11T21:47:43.290 に答える
6

私の知る限り、Quotemeta はネイティブに実装されていませんが、数か月前にこれを使用しました。

function quotemeta (str) {
  // http://kevin.vanzonneveld.net
  // +   original by: Paulo Freitas
  // *     example 1: quotemeta(". + * ? ^ ( $ )");
  // *     returns 1: '\. \+ \* \? \^ \( \$ \)'
  return (str + '').replace(/([\.\\\+\*\?\[\^\]\$\(\)])/g, '\\$1');
}

http://phpjs.org/functions/quotemeta:496から

于 2011-06-11T21:50:58.327 に答える