You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从jQuery 1.4.1迁移至1.9.1时正则选择器插件$.expr报错求助

修复jQuery 1.9.1中老正则选择器插件的报错问题

这个报错的根源是你用的这款老正则选择器插件,它的正则匹配逻辑没跟上jQuery 1.9+版本对选择器解析的变化——插件代码里的match[3]之所以是undefined,是因为它预期的选择器捕获组在jQuery 1.9.1里没有被正确匹配到,导致match数组的长度不够。

下面给你两种可行的解决办法:

方案一:修复插件的匹配逻辑

找到插件的核心代码部分(就是报错那一行所在的函数),把原来的匹配逻辑替换成更健壮的写法,确保能正确提取属性名和正则表达式:

jQuery.expr[':'].regex = function(elem, index, match) {
    // 修正正则,准确捕获属性和正则内容
    var regexParts = match[0].match(/:regex\(([^,]+),\s*(.*?)\)/);
    
    // 匹配失败直接返回false,避免报错
    if (!regexParts || regexParts.length < 3) {
        return false;
    }
    
    var propName = regexParts[1].trim();
    var regexPattern = regexParts[2].trim();
    
    // 保留原插件的正则匹配逻辑(比如忽略大小写,可根据需求调整)
    var regex = new RegExp(regexPattern, 'i');
    var propValue = jQuery(elem).attr(propName) || '';
    
    return regex.test(propValue);
};

这个修改后的代码会先检查匹配结果是否有效,再提取参数,彻底避免了Cannot read property '3' of undefined的错误。

方案二:抛弃老插件,用jQuery原生方法实现

其实jQuery 1.9+的filter()方法已经足够灵活,完全可以替代这个老插件,还能避免插件兼容性问题。把你的原代码替换成下面的写法:

var rows = $("#tableComments").find("tr:visible").filter(function() {
    // 检查当前元素的class是否不以"th"开头
    return !/^th/.test($(this).attr('class') || '');
});

这种写法更直观,不需要依赖第三方插件,稳定性也更强。

内容的提问来源于stack exchange,提问作者keivan sharifi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:52:09