javascript正则表达式查找和jQuery选择器
我在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
$.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