【问题标题】:Matching a word works on www.regexr.com but not on my website [duplicate]匹配单词在 www.regexr.com 上有效,但在我的网站上无效[重复]
【发布时间】:2014-07-26 14:07:52
【问题描述】:

我正在使用 www.regexr.com 来检查我在 JavaScript 中的正则表达式。 假设我有以下字符串:

/facilityservices/show/1/price_min:sdc155sd/

现在我的任务是找到 price_min:sdc155sd 并将其删除。我写了

var patterns_array = [
    'price_min:\w+'
];

var pattern = new RegExp(patterns_array.join("|"), "g");
new_url = current_url.replace(pattern, '');

在此 RegExp 上方的网站上匹配该单词。但是,当我检查我的网站时,它不起作用。我有错误的地方。太容易出错了……

【问题讨论】:

    标签: javascript regex replace


    【解决方案1】:

    这是因为 RegExp 转义了 \w(作为普通字符串)你需要 \\w

    var patterns_array = [
        'price_min:\\w+'
    ];
    

    From the docs:

    使用构造函数时,正常的字符串转义规则 (包含在字符串中时,前面带有 \ 的特殊字符)是 必要的

    上面的方法也可以,但是你的结果中会留下两个斜杠//,你应该应用这个:

    price_min:\\w+\/?
    

    【讨论】:

      【解决方案2】:

      您的模式不起作用,因为您是从字符串创建的。在这种情况下,这不是必需的:

      var pattern = /price_min:\w+/;
      

      会做的。

      当您从字符串创建正则表达式时,您必须处理字符串语法也认为反斜杠字符 (\) 是特殊的这一事实。因此,当 RegExp 构造函数看到您的字符串以将其解释为正则表达式时,“w”之前的反斜杠将消失。如果需要从字符串创建正则表达式,则必须将反斜杠字符加倍:

      var pattern = new RegExp("price_min:\\w+");
      

      同样,在这种特殊情况下,这不是必需的。

      【讨论】:

        猜你喜欢
        • 2018-05-15
        • 1970-01-01
        • 2018-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        相关资源
        最近更新 更多