我有以下代码:
var stringToMatch = "De$mond. \(blah)";
var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");
return regex.test("testing De$mond.");
现在我需要在stringToMatch
pattern
如果我理解正确的话,我发现here的解决方案提示了这种方法:
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
中的所有字符?
e.g。
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
一样?
答案 0 :(得分:0)
这是一个简单的正则表达式,用于从字符串输入中创建安全的正则表达式模式。
var pattern= "De$mond.";
var regex = new RegExp(pattern.replace( /([.*+?^${}()|[\]\/\\])/g , '\\$1'), "i");
regex.test("testing De$mond. string here."); // === true
请注意,这意味着您无法使用“通配符”或任何RegExp语法,但最终会得到一个真正的正则表达式,它将执行从源文本到模式的文字匹配。