100

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

我正在尝试使用 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

4 回答 4

164

你需要用两个反斜杠转义它

\\?

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

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

于 2009-05-20T20:08:09.037 回答
28

您应该使用双斜杠:

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

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

"\\?"变成 "\?"

于 2009-05-20T20:09:50.860 回答
17

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

var gent = /I like your Apartment. Could we schedule a viewing\?/g;
于 2009-05-20T20:14:08.760 回答
6

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

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

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

const questionmark_block = String.raw`\?`; // A literal ?
const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables
console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g

必读:RegExp: MDN 上的描述。

于 2016-02-02T07:26:36.493 回答