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