javascript 正则表达式回顾和 jQuery 选择器

javascript regex lookbehind and jQuery selector

我在 jQuery

的自定义选择器中使用以下正则表达式
$.expr[":"].matchRegex = $.expr.createPseudo(function(arg) {
    return function( elem ) {
        return $(elem).text().match(new RegExp(arg, 'i')) != null;
    };
});

但是,由于 javascript 不允许回溯,我无法通过此正则表达式:

/\b(?<!')(s|otherword)s?\b/

如果表达式前面没有单引号,则该表达式应至少匹配一个 s。表达式中的 s|otherword 部分实际上是由用户提供的,所以我必须使用它。

我了解如何创建自定义函数 (Javascript: negative lookbehind equivalent?) 可以作为后视(替换示例)的解决方法,但我无法让它工作。

我尝试将我的选择器修改为:

$.expr[":"].matchRegex = $.expr.createPseudo(function(arg) {
    return function( elem ) {
        return ($(elem).text().match(new RegExp(arg, 'i')) != null) ? false : true;
    };
});

并将正则表达式更改为:

/\b(')(s|otherword)s?\b/

但这将 return 所有文本不包含 's.

的元素

我可以使用带有回调函数的匹配方法吗?如果不是,如何修改 jQuery 选择器以适应这种情况?

任何见解和帮助总是非常感谢。

谢谢!

The expression should match at least one s if it not preceded by a single quote.

因为您真的不想使用匹配项,如果有匹配项,则只测试,您不需要真的需要回顾一下。您只需要确保它在字符串的开头有效。

(?:^|[^'])(s|otherword)s?\b

就这些,真的。