1

重複の可能性:
JavaScript での大文字と小文字を区別しない正規表現

今私はこれを持っています:

my_list.match(new RegExp("(?:^|,)"+my_name+"(?:,|$)")))

以下を考えると、これは次のとおりです。

my_list = "dog, cat, boy"
my_name = "dog"

true を返します。

しかし、私が持っている場合

my_list = "Dog,Cat,boy"

my_name = "boy"

正規表現は一致しません。大文字と小文字を区別しないで一致させるには、どのように適応すればよいですか?

4

1 に答える 1

1

まず、エスケープされていない変数から正規表現を作成しないでください。この関数を使用して、最初にすべての特殊文字をエスケープします。

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

オブジェクトを変更しRegExpます。一度だけ含める必要があります。今:

function stringContains(str, token) {
  var 
    spaces = /^\s+|\s+$/g,              // matches leading/trailing space
    token = token.replace(spaces, ""),  // trim the token
    re = new RegExp("(?:^|,)\\s*" + RegExp.quote(token) + "\\s*(?:,|$)", "i");

  return re.test(str);
}

alert( stringContains("dog, cat, boy", " Dog ") );

ノート

  • 大文字と小文字を区別しない"i"new RegExp
  • \s*コンマの前後に空白を許可する2 つが追加されました。
  • それ"(?:^|,)\\s*"は正しく、そうではありません"(?:^|,)\s*""(JS 文字列では、すべてのバックスラッシュをエスケープする必要があります)。
于 2012-11-12T17:31:17.847 に答える