如何在正则表达式中正确转义字符

| 我想在字符串中进行字符串搜索。简单地说“ 0”。 当此“ 1”字符串包含特殊的正则表达式字符(例如*,+等)时,就会出现问题。它失败,并显示错误“ 2”。 我浏览了网络,发现可以用
\\Q some string \\E
转义字符串。 但是,这并不总是产生所需的行为。例如:
var sNeedle = \'*Stars!*\';
var sMySTR = \'The contents of this string have no importance\';
sMySTR.search(\'\\Q\' + sNeedle + \'\\E\');
结果是-1。好。
var sNeedle = \'**Stars!**\';
var sMySTR = \'The contents of this string have no importance\';
sMySTR.search(\'\\Q\' + sNeedle + \'\\E\');
结果为“无效的量词”。发生这种情况是因为2个或更多特殊字符彼此“接触”,原因是:
var sNeedle = \'*Dont touch me*Stars!*Dont touch me*\';
var sMySTR = \'The contents of this string have no importance\';
sMySTR.search(\'\\Q\' + sNeedle + \'\\E\');
可以正常工作。 我知道我可以创建一个函数
escapeAllBadChars(sInStr)
,并在每个可能的特殊正则表达式字符之前添加双斜杠,但是我想知道是否有更简单的方法?     
已邀请:
\\Q...\\E
不能在JavaScript中工作(至少,它们不会转义任何内容...),如您所见:
var s = \"*\";
print(s.search(/\\Q*\\E/));
print(s.search(/\\*/));
产生:
-1
0
正如您在Ideone上看到的那样。 以下字符需要转义:
(
)
[
{
*
+
.
$
^
\\
|
?
因此,将执行以下操作:
function quote(regex) {
  return regex.replace(/([()[{*+.$^\\\\|?])/g, \'\\\\$1\');
}
不,
]
}
不需要逃脱:它们没有特殊含义,只需要打开它们的对应部分即可。 请注意,使用文字正则表达式
/.../
时,还需要转义
/
字符。但是,ѭ27不是一个正则表达式元字符:在ѭ29对象中使用时,不需要转义。     
我只是想用Java脚本,但是有没有理由需要使用regex引擎?怎么样
var sNeedle = \'*Stars!*\';
var sMySTR = \'The contents of this string have no importance\';
if ( sMySTR.indexOf(sNeedle) > -1 ) {
   //found it
}
    
我快速进行了一次Google搜索,以查看其中的内容,看来您可以使用几种方式来转义正则表达式字符。根据一页的内容,您可以定义并运行以下函数来转义有问题的字符:
RegExp.escape = function(text) {
    return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");
}
另外,您可以尝试使用单独的库(例如XRegExp),该库已经处理了您要重新解析的细微差别。     
重复的https://stackoverflow.com/a/6969486/151312 根据MDN,这是正确的(请参见上面的说明):
function escapeRegExp(str) {
  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");
}
    

要回复问题请先登录注册