Javascript 如何转义RegExp对象中使用的字符串
我有以下代码:Javascript 如何转义RegExp对象中使用的字符串,javascript,regex,escaping,Javascript,Regex,Escaping,我有以下代码: var stringToMatch = "De$mond. \(blah)"; var pattern = "^" + stringToMatch; var regex = new RegExp(pattern, "i"); return regex.test("testing De$mond."); 现在我需要先退出stringToMatch,然后才能在模式中使用它 如果我理解正确,我发现的解决方案建议使用此方法: var stringToMatch = "De$mond.
var stringToMatch = "De$mond. \(blah)";
var pattern = "^" + stringToMatch;
var regex = new RegExp(pattern, "i");
return regex.test("testing De$mond.");
现在我需要先退出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
中的所有字符
e、 g
但它不起作用。为什么呢
还有,除了我提供的链接中建议的方法外,还有其他方法可以转义stringToMatch
?i、 e.在不指定要转义的字符的情况下,使用/[\-\[\]\/\{\\\\\\(\)\*\+\?\\\\^\$\\\\\\\\\\\\\\\\\\\\\\]/g
?这里有一个简单的regexp,可以从字符串输入中生成安全的regexp模式
var pattern= "De$mond.";
var regex = new RegExp(pattern.replace( /([.*+?^${}()|[\]\/\\])/g , '\\$1'), "i");
regex.test("testing De$mond. string here."); // === true
请注意,这意味着您不能使用“通配符”或任何RegExp语法,但最终将得到一个真正的RegExp,它将执行从源文本到模式的文本匹配。,因为如果您转义dog
,您将得到\d\o\g
\d
是[0-9]
的缩写<代码>\D
匹配[^0-9]
.hmm。。没有意识到:-)你是对的。所以我绝对需要逃逸一组特定的角色,没有其他方法可以绕过这些角色,而不涉及特定的角色?你为什么首先要这么做?你到底想用这段代码实现什么?这只是我正在构建的一个简单的搜索引擎。我有一个字符串数组,用户可以键入一个单词。然后,我在该数组中查找匹配项,但鉴于我使用正则表达式查找匹配项,我显然需要转义用户数组中的字符input@TheNortonCommander如果您是逐字匹配输入,为什么不直接使用,而不是通过正则表达式引擎进行跟踪?
var stringToMatchEscaped = "\D\e\$\m\o\n\d\. \\\(\b\l\a\h\)";
var pattern= "De$mond.";
var regex = new RegExp(pattern.replace( /([.*+?^${}()|[\]\/\\])/g , '\\$1'), "i");
regex.test("testing De$mond. string here."); // === true