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


90

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

我正在尝试使用正则表达式在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');     
 }          

由于?角色原因,这不起作用。...我尝试使用进行转义\,但这也不起作用。还有另一种使用?字面方式代替特殊字符的方法吗?


最糟糕的是,即使使用字符串而不是正则表达式也会导致此问题,例如,str.search("?")这绝对似乎是一个错误,因为它不是正则表达式,因此不应被视为一个正则表达式。🤦
Synetech

Answers:



26

您应该使用双斜杠:

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

为什么?因为在JavaScript中,\还用于转义字符串中的字符,因此:“ \?” 变成:"?"

并且"\\?",成为 "\?"


16

您可以使用斜杠(而不是引号)来分隔正则表达式,然后使用单个反斜杠来避开问号。试试这个:

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

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上的描述

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.