まず、エスケープされていない変数から正規表現を作成しないでください。この関数を使用して、最初にすべての特殊文字をエスケープします。
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 文字列では、すべてのバックスラッシュをエスケープする必要があります)。