jQuery正则表达式选择器不起作用

时间:2013-10-09 07:27:00

标签: jquery regex jquery-selectors

我需要通过id regex获取一些元素。我找到了source的一些解决方案:

jQuery.expr[':'].regex = function(elem, index, match) {
    var matchParams = match[3].split(','),
        validLabels = /^(data|css):/,
        attr = {
            method: matchParams[0].match(validLabels) ? 
                        matchParams[0].split(':')[0] : 'attr',
            property: matchParams.shift().replace(validLabels,'')
        },
        regexFlags = 'ig',
        regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags);
    return regex.test(jQuery(elem)[attr.method](attr.property));
}

每个人都声称它工作正常但是当我尝试运行简单的代码$(':regex[id,^node\-[0-9]+\-[0-9]+$]')时,我在匹配[3] .split上收到错误,说该方法不存在。实际上我在这个函数的第一行添加了console.log(匹配),我得到了:

[":regex", "regex", undefined, undefined, index: 0, input: ":regex[id,^node-[0-9]+-[0-9]+$]"]

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您已使用[]代替()来指定正则表达式

$(':regex(id,^node\-[0-9]+\-[0-9]+$)')

演示:Fiddle

我还建议将它与其他一些更快的选择器(如类选择器或元素选择器)一起使用,或者至少使用属性存在过滤器,如$('[id]:regex(id,^节点 - [0-9] + - [0-9] + $)')