次のコードがあります。
var stringToMatch = "De$mond. \(blah)";
var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");
return regex.test("testing De$mond.");
今、私はstringToMatch
それを使用する前にエスケープする必要がありますpattern
私がここで見つけた解決策は、私が正しく理解していれば、この方法を提案しています:
var stringToMatch = "De$mond. \(blah)";
stringToMatch = stringToMatch.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");
return regex.test("testing De$mond.");
stringToMatch
代わりにすべての文字を単純にエスケープできないのはなぜですか?
例えば
var stringToMatch = "De$mond. \(blah)";
var stringToMatchAsArrayOfChars = [];
for (var i = 0; i < stringToMatch.length; i++)
{
stringToMatchAsArrayOfChars.push(stringToMatch.substr(i, 1));
}
var stringToMatchEscaped = "";
for (var i = 0; i < stringToMatchAsArrayOfChars.length; i++)
{
if (stringToMatchAsArrayOfChars[i] !== " ")
{
stringToMatchEscaped = stringToMatchEscaped + "\\" + stringToMatchAsArrayOfChars[i];
}
else
{
stringToMatchEscaped = stringToMatchEscaped + " ";
}
}
var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");
return regex.test("testing De$mond.");
上記の方法ははるかに冗長であることは理解していますが、基本的には次のとおりです。
var stringToMatchEscaped = "\D\e\$\m\o\n\d\. \\\(\b\l\a\h\)";
しかし、それは機能していません。何故ですか?
また、stringToMatch
私が提供したリンクで提案されている以外のエスケープ方法はありますか? つまり、エスケープする文字を指定せずに/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g
?