题
基于这个答案
我尝试了以下内容 http://regexpal.com/ 但是无法使它工作。缺少什么? JavaScript不支持它吗?
REGEX: (?=foo)(?=baz)
细绳: foo,bar,baz
解决方案
两者都是不可能的 (?=foo)
和 (?=baz)
同时匹配。这需要下一个角色是 f
和 b
同时这是不可能的。
也许您想要这个:
(?=.*foo)(?=.*baz)
这就是这样 foo
必须出现在任何地方, baz
必须出现在任何地方,不一定按顺序和可能重叠(尽管在这种特定情况下都是不可能的,因为字母本身不会重叠)。
其他提示
Boolean(and)和通配符搜索的示例,我在JavaScript Autococterete插件中使用的示例:
匹配的字符串:“我的词”
搜索的字符串:“我正在搜索本文中的有趣单词”
您需要以下言论:/^(?=.*my)(?=.*word).*$/im
解释:
^ 主张一条线开始的位置
?= 积极的lookahead
.* 匹配任何字符(Newline除外)
() 小组
$ 断言一条线的立场
一世 修饰符:不敏感。病例不敏感的匹配(忽略[A-ZA-Z]的情况)
m 修饰符:多行。原因 ^和$匹配每行的开始/结束(不仅是字符串的开始/结束)
在此处测试正则条件: https://regex101.com/r/is5jj3/1
因此,您可以创建一个JavaScript函数:
- 更换正则保留字符以避免错误
- 在空间上拆分绳子
- 将您的单词封装在Regex组中
- 创建正则模式
- 执行正则比赛
例子:
function fullTextCompare(myWords, toMatch){
//Replace regex reserved characters
myWords=myWords.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
//Split your string at spaces
arrWords = myWords.split(" ");
//Encapsulate your words inside regex groups
arrWords = $.map( arrWords, function( n ) {
return ["(?=.*"+n+")"];
});
//Create a regex pattern
sRegex = new RegExp("^"+arrWords.join("")+".*$","im");
//Execute the regex match
return(toMatch.match(sRegex)===null?false:true);
}
//Using it:
console.log(
fullTextCompare("my word","I'm searching for my funny words inside this text")
);
//Wildcards:
console.log(
fullTextCompare("y wo","I'm searching for my funny words inside this text")
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
也许只是一个或操作员 |
可以解决您的问题:
细绳: foo,bar,baz
REGEX: (foo)|(baz)
结果: ["foo", "baz"]
也许您正在寻找这样的东西。如果您想在包含“ foo”和“ baz”同时选择完整的行,则此正则是:
.*(foo)+.*(baz)+|.*(baz)+.*(foo)+.*