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

时间:2009-05-20 20:04:52

标签: 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(content.search(gent) != -1){   
     alert('worked');     
 }          

由于?字符,这不起作用....我尝试用\转义它,但这也不起作用。还有另一种方法可以使用?字面而不是特殊字符吗?

4 个答案:

答案 0 :(得分:122)

你需要用两个反斜杠来逃避它

\\?

有关详细信息,请参阅此处:

http://www.trans4mind.com/personal_development/JavaScript/Regular%20Expressions%20Simple%20Usage.htm

答案 1 :(得分:18)

你应该使用双斜杠:

var regex = new RegExp("\\?", "g");

为什么呢?因为在JavaScript中\也用于转义字符串中的字符,所以:“\?”成为:"?"

"\\?"成为"\?"

答案 2 :(得分:15)

您可以使用斜杠而不是引号来划分正则表达式,然后使用单个反斜杠来转义问号。试试这个:

var gent = /I like your Apartment. Could we schedule a viewing\?/g;

答案 3 :(得分:4)

每当你有一个已知的模式(即你没有使用变量来构建一个RegExp)时,使用 literal 正则表达式表示法,你只需要使用单个反斜杠来转义特殊的正则表达式元字符:

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^

每当您需要动态构建RegExp时,请使用 RegExp构造函数表示法,其中必须双反斜杠才能表示字面反斜杠

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");

在MDN必读:RegExp: Description