【问题标题】:Javascript Regex object and the dollar symbol [duplicate]Javascript Regex对象和美元符号[重复]
【发布时间】:2009-02-04 17:18:42
【问题描述】:

在下面的代码中。我期望是真的,但我却是假的。我错过了什么?

var text = "Sentence $confirmationlink$ fooo";     
alert(placeHolderExists(text,'confirmationlink'); // alerts false
function placeHolderExists(text,placeholdername) {  
  var pattern = new    RegExp('\$'+placeholdername+'\$');    
  return pattern.test(text);
}

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    RegExp 表达式构建器中的“\”在构建字符串时被视为转义字符,就像在实际 RegExp 中一样。你需要逃跑两次,试试:

    new RegExp('\\$'+placeholdername+'\\$');
    

    【讨论】:

    • 如果 Sergio 需要的只是验证匹配是否存在,为什么还要使用 Regex?如果 Sergio 想要匹配的值,那么应该使用正则表达式,但如果只是验证匹配,那么 IndexOf 会更有效且更简单......不是吗?
    • 别问我,我只在这里工作。 (说真的,indexOf 的速度大约是正则表达式的 2 倍,但它不灵活,而且我们说的是已经非常快的东西)
    【解决方案2】:

    应该是

    function placeHolderExists(text,placeholdername) {  
      var pattern = new    RegExp('\\$'+placeholdername+'\\$');    
      return pattern.test(text);
    }
    

    你需要双重转义你的 $ 符号

    编辑:
    annakata 解释了原因。

    【讨论】:

      【解决方案3】:

      这种混淆是另一个例子,说明为什么你不应该使用正则表达式,除非你真的需要。

      return text.indexOf('$'+placeholdername+'$')!=-1;
      

      ...更简单,更快,当你有有趣的角色时不会摔倒。

      【讨论】:

      • 在这种情况下(原始问题)我会同意。由于您实际上只是在寻找真/假,因此 instanceOf 就足够了。但是,如果您想要匹配的值,那么正则表达式将是该工作的正确工具。
      【解决方案4】:

      双斜线。

      new RegExp('\\$'+placeholdername+'\\$');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 2010-11-30
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        相关资源
        最近更新 更多