【问题标题】:escaping question mark in regex javascript在正则表达式 javascript 中转义问号
【发布时间】:2010-10-27 18:13:09
【问题描述】:

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

我正在尝试使用 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("?") 这绝对看起来像一个错误,因为这不是一个正则表达式,不应该被视为一个。 ??????

标签: javascript regex literals


【解决方案1】:

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

\\?

更多详情请看这里:

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

【讨论】:

  • ... 一个用于正则表达式,一个用于字符串声明。
  • 心灵打击!经过多年与正则表达式的合作,我以为我看到了一切……但是不,给你。双逃。估计有一天我会看到三倍。
【解决方案2】:

你应该使用双斜杠:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      只要你有一个 已知 模式(即你不使用变量来构建正则表达式),使用 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");
      

      如果您使用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: Description 在 MDN。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        相关资源
        最近更新 更多