匹配一个单词可以在www.regexr.com上找到,但不能在我的网站上找到

时间:2014-07-26 14:07:52

标签: javascript regex replace

我正在使用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上面的网站上匹配这个词。但是,当我检查我的网站时它不起作用。我有错误的地方。犯错误太容易了......

2 个答案:

答案 0 :(得分:0)

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

var pattern = /price_min:\w+/;

会这样做。

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

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

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

答案 1 :(得分:0)

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

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

From the docs:

  

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

此外,上述方法仍有效,但您的结果中会留下两个尾部斜杠//,您应该将其应用于此:

price_min:\\w+\/?