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

And*_*rew 77 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');     
 }          
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为?字符....我试图逃避它\,但这也不起作用.有没有其他方式可以使用?字面而不是特殊字符?

Jon*_*Jon 128

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

\\?
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此

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

  • ...一个用于正则表达式,一个用于字符串declration. (14认同)
  • 头脑一击!经过多年使用正则表达式,我以为我看到了一切..但是不,给你。双逃亡。我猜有一天我会看到三重。 (2认同)

CMS*_*CMS 18

你应该使用双斜杠:

var regex = new RegExp("\\?", "g");
Run Code Online (Sandbox Code Playgroud)

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

而且"\\?",成为 "\?"


jig*_*ggy 15

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

var gent = /I like your Apartment. Could we schedule a viewing\?/g;
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 6

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

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^
Run Code Online (Sandbox Code Playgroud)

每当您需要动态构建 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");
Run Code Online (Sandbox Code Playgroud)

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

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^
Run Code Online (Sandbox Code Playgroud)

必读:RegExp: MDN 上的描述