jQuery获取查询字符串值,然后查找匹配的元素

时间:2014-09-27 14:46:41

标签: jquery regex

使用正则表达式我试图从查询字符串中提取数字值。然后获取这些值并在DOM中查找数据值属性等于正则表达式返回结果中的值的元素。

正则表达式

  • 需要删除allow = 1和paged = 0
  • 仅选择具有数字值的值对

这是我的查询字符串的外观:

var query = location.search;
console.log(query);
//log ?allow=1&paged=0&categories=96,105,25&attr_color=14,98&promotion=monthly

我希望得到正则表达式:

96,105,25,14,98

允许&页面被删除,并且未捕获促销,因为它的值不是数字。

搜索DOM

一旦我拥有了这些值,我想在DOM中搜索元素(任何.list,.checkbox或.option类),这些元素的数据值与正则表达式结果中的值匹配。

以下是基于值匹配的元素的示例标记。

<div class="widget categories">
    <!-- match -->
    <a href="#" class="list" data-value="96">Pants</a>

    <!-- NO match -->
    <input class="checkbox" id="shoes" name="shoes" value="false" data-value="123"> 
    <!-- match -->
    <input class="checkbox" id="shirts" name="shirts" value="true" data-value="105"> 

    <select name="cat" id="cat">
        <option selected="selected" value="">All Categories</option>
        <!-- match -->
        <option class="option" value="25" data-value="25">Shoes</option>
        <!-- NO match -->
        <option class="option" value="22" data-value="22">Jackets</option>
    </select>
</div>

<div class="widget attribute-color">
    <!-- NO match -->
    <a href="#" class="list" data-value="55">Blue</a>

    <!-- match -->
    <input class="checkbox" id="purple" name="purple" value="true" data-value="14"> 

    <select name="colors" id="colors">
        <option selected="selected" value="">All Colors</option>
        <!-- NO match -->
        <option class="option" value="112" data-value="112">Red</option>
        <!--match -->
        <option class="option" value="98" data-value="98">Yellow</option>
    </select>
</div>





修改

我在使用RegExp时遇到问题。

如果我使用它,则返回null

var regexS = "allow=\d+|paged=\d+|(\d+)(?=,|&)";
var regex = new RegExp( regexS );
var query = regex.exec( location.search );
console.log("query: " + query); // query: null

如果我使用它,它只返回我相信第一个结果

var query = /allow=\d+|paged=\d+|(\d+)(?=,|&)/g.exec( location.search );
console.log("query: " + query); // query: 1,1





修改2

为了处理正则表达式,我最终使用.replace()而不是新的RegExp(无法让它工作,不知道为什么。)

var query  = location.search;
var values = '';

query.replace(/allow=\d+|paged=\d+|(\d+)(?=,|&)/g, function(param, match) {
    if (match != undefined) {
        values += match + ',';
    };
});
console.log("values: " + values); // values: 96,105,25,14

我现在遇到的问题是它永远不会返回查询字符串的最后一个数字,因此匹配结果中会忽略 98

奇怪的是,如果我使用实际的字符串而不是 location.search ,它会返回最后一个数字:

var query = '?allow=1&paged=0&categories=96,105,25&attr_color=14,98&promotion=monthly';
console.log("values: " + values); // values: 96,105,25,14,98

我尝试过使用 var query = location.search.toString();和 JSON.stringify(location.search)但总是省略最后一位数。

我非常接近这一点,任何帮助都非常感激。

2 个答案:

答案 0 :(得分:0)

我假设您使用逗号分隔值"96,105,25,14,98,48"。使用:

var colorncategories= "96,105,25,14,98,48".split(",");
var elem_colorncategories= $("[data-value='" + colorncategories.join("'],[data-value='") + "']");

答案 1 :(得分:0)

allow=\d+|paged=\d+|(\d+)(?=,|&)

试试这个。抓住比赛。

参见演示。

http://regex101.com/r/lS5tT3/67