[英]How do I escape a string used in a RegExp object
我有以下代码:
var stringToMatch = "De$mond. \(blah)";
var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");
return regex.test("testing De$mond.");
现在我需要在pattern
使用stringToMatch
之前将其转义
如果我理解正确,我在这里找到的解决方案建议使用此方法:
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
那样转义的字符?
这是一个简单的正则表达式,可通过字符串输入制作安全的正则表达式模式。
var pattern= "De$mond.";
var regex = new RegExp(pattern.replace( /([.*+?^${}()|[\]\/\\])/g , '\\$1'), "i");
regex.test("testing De$mond. string here."); // === true
请注意,这意味着您不能使用“通配符”或任何RegExp语法,但是最终将得到一个真正的regexp,它将执行从源文本到模式的文字匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.