javascript正则表达式查找和jQuery选择器

javascript正则表达式查找和jQuery选择器,javascript,jquery,regex,lookbehind,Javascript,Jquery,Regex,Lookbehind,我在jQuery中的自定义选择器中使用以下正则表达式 $.expr[":"].matchRegex = $.expr.createPseudo(function(arg) { return function( elem ) { return $(elem).text().match(new RegExp(arg, 'i')) != null; }; }); 但是,由于javascript不允许查找,我无法传递此正则表达式: /\b(?<!')(s|othe

我在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/
并将正则表达式更改为:

/\b(')(s|otherword)s?\b/
但这将返回所有包含不包含
文本的元素

我可以将match方法与回调函数一起使用吗?如果没有,如何修改jQuery选择器以适应这种情况

任何洞察和帮助总是非常感谢

谢谢大家!

如果表达式前面没有单引号,则该表达式应至少匹配一个s

因为您真的不想使用匹配项,所以只需测试是否存在匹配项,您就不需要查看。您只需要确保它在字符串的开头起作用

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

真的,就这些。

这些变通方法对于测试字符串是否匹配很有用,它们不适合搜索和替换。因此。。。您的实际问题是“如何在JavaScript正则表达式中模拟lookbehind”?因为jQuery似乎与您的问题没有太多关系。感谢@Barmar的编辑和快速响应。我不想替换文本-我只想匹配它(我提到替换是因为变通解决方案提供了该方法作为示例)。在上述场景中,匹配与搜索有何不同?是因为我使用了自定义选择器吗?@Tomalak是的,这就是我想要实现的。如果模拟需要一个自定义函数,我不确定自定义选择器/jQuery是否会使事情变得复杂?false:true
是反模式。使用
返回x!==无效。在上面显示的特定情况下,我甚至只需
返回新的RegExp(arg,'I').test($(elem.text())。谢谢!我相信这是可行的。很容易解释非捕获组与
\b
之间的区别吗?
\b
匹配单词边界(即:a
\w
和a
\w
之间的零宽度位置)。您最初的定义“仅当前面没有单引号时”没有说“并且在单引号之前必须有一个单词边界”,因此我删除了前导的
\b
。(因为如果不是这样的话,在单引号之前需要一个
[a-zA-Z0-9.]
,我想这可能不是你的意图。)好的。我只需要测试一下这个正则表达式。此正则表达式将匹配不是完整单词的s。这就是为什么表达式前面有
\b
。我想匹配
s
otherword
仅当它们是整词时。我认为
\b
的主要问题是使用单引号作为单词边界。你把我揍了一顿~刚刚注意到你的评论!那么,我该如何解决这个问题呢?例如,对于以下字符串
儿童的位置和s.
,正则表达式应该与最后一个
s
匹配,但不能与
儿童的
后面的匹配。我在用我的代码测试正则表达式,但不知道为什么它不起作用。显然,我测试的文本包含了这个
,它不是一个单引号,而是一个右单引号!我相信这个正则表达式会起作用:
(?:^[^'])\b(s|otherword)s?\b
(?:^|[^'])(s|otherword)s?\b