正则表达式javascript中的转义问号

正则表达式javascript中的转义问号,javascript,regex,literals,Javascript,Regex,Literals,我认为这是一个简单的问题 我尝试在JavaScript中使用正则表达式搜索另一个字符串中出现的字符串,如下所示: var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: "; var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g"); if(conten

我认为这是一个简单的问题

我尝试在JavaScript中使用正则表达式搜索另一个字符串中出现的字符串,如下所示:

 var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: ";

 var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g");

 if(content.search(gent) != -1){   
     alert('worked');     
 }          

这不起作用,因为
字符……我尝试用
\
对其进行转义,但也不起作用。是否有另一种方法可以直接使用
而不是作为特殊字符使用?

您需要使用两个反斜杠来转义它

\\?
有关更多详细信息,请参见:


您应该使用双斜杠:

var regex = new RegExp("\\?", "g");
为什么??因为在JavaScript中,
\
也用于转义字符串中的字符,所以“\?”变为:
“?”


“\\?”
,则变成
“\?”

您可以用斜杠而不是引号来分隔regexp,然后用一个反斜杠来避开问号。试试这个:

var gent = /I like your Apartment. Could we schedule a viewing\?/g;
每当您有一个已知的模式(即,您不使用变量来构建RegExp)时,请使用文本regex表示法,其中您只需要使用单个反斜杠来转义特殊的regex元字符:

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^
每当需要动态构建RegExp时,请使用
RegExp
构造函数表示法,其中必须使用两个反斜杠来表示文字反斜杠:

如果使用
String.raw
String文本,则可以按原样使用
\
(请参阅使用模板字符串文本的示例,其中可以将变量放入正则表达式模式):

const questionmark\u block=String.raw`\?`;//文字?
const initial_subpattern=“我喜欢你的公寓\\。我们能安排一次参观吗”;
const re=new RegExp(`${initial_subpattern}${questionmark_block}`,'g');//从两个变量构建模式

console.log(re);//=>/我喜欢你的公寓。我们可以安排一个查看\?/g
…一个用于正则表达式,另一个用于字符串定义。真让人吃惊!在regex工作多年后,我觉得我看到了一切。。但是不,给你。双重逃脱。我想有一天我会看到三重。最糟糕的是,即使使用字符串而不是正则表达式也会导致这个问题,例如
str.search(“?”)
,这看起来肯定像个bug,因为它不是正则表达式,不应该被视为一个。
var questionmark_block = "\\?"; // A literal ?
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot
var re = new RegExp(initial_subpattern + questionmark_block, "g");