Javascript使用非捕获组获取查询字符串值

Ben*_*min 5 javascript regex

给定此查询字符串:

?cgan=1&product_cats=mens-jeans,shirts&product_tags=fall,classic-style&attr_color=charcoal,brown&attr_size=large,x-small&cnep=0
Run Code Online (Sandbox Code Playgroud)

如何从仅'product_cat, product_tag, attr_color, attr_size'返回的这些参数类型中提取值'mens-jeans,shirts,fall,classic-style,charcoal,brown,large,x-small

我尝试将非捕获组用于param类型并仅为值捕获组,但它返回两者.

(?:product_cats=|product_tags=|attr\w+=)(\w|,|-)+
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 2

您可以使用以下方式收集该值

(?:product_cats|product_tags|attr\w+)=([\w,-]+)
Run Code Online (Sandbox Code Playgroud)

请注意,字符类 ( [\w,-]+) 比替代列表 ( (\w|,|-)*) 高效得多,并且我们避免了仅捕获最后一个字符的问题。

这是一个代码示例:

(?:product_cats|product_tags|attr\w+)=([\w,-]+)
Run Code Online (Sandbox Code Playgroud)
var re = /(?:product_cats|product_tags|attr\w+)=([\w,-]+)/g; 
var str = '?cgan=1&product_cats=mens-jeans,shirts&product_tags=fall,classic-style&attr_color=charcoal,brown&attr_size=large,x-small&cnep=0';
var res = [];
while ((m = re.exec(str)) !== null) {
    res.push(m[1]);
}
document.getElementById("res").innerHTML = res.join(",");
Run Code Online (Sandbox Code Playgroud)