繁体   English   中英

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

[英]escaping question mark in regex javascript

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

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

这不起作用,因为? 字符....我尝试用\\转义它,但这也不起作用。 还有其他使用方法? 从字面上而不是作为特殊字符?

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

\\?

有关更多详细信息,请参阅此内容:

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

您应该使用双斜线:

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

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

"\\\\?" , 变成"\\?"

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

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

每当您有一个已知模式(即您不使用变量来构建 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 上的描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM