基于这个答案
Regular Expressions: Is there an AND operator?
我在http://regexpal.com/上尝试了以下操作,但无法让它发挥作用。缺少什么? javascript不支持吗?
正则表达式:(?=foo)(?=baz)
字符串:foo,bar,baz
答案 0 :(得分:67)
(?=foo)
和(?=baz)
不可能同时匹配。这将要求下一个字符同时为f
和b
,这是不可能的。
也许你想要这个:
(?=.*foo)(?=.*baz)
这表示foo
必须出现在任何地方且baz
必须出现在任何地方,不一定按此顺序且可能重叠(尽管在这种特定情况下不可能重叠,因为字母本身不重叠)。
答案 1 :(得分:9)
我在javascript自动完成插件中使用的布尔(AND)加通配符搜索示例:
要匹配的字符串:"我的字"
要搜索的字符串:"我正在本文中搜索我有趣的字词"
您需要以下正则表达式:
/^(?=.*my)(?=.*word).*$/im
解释
^ 在行的开头声明位置
?= 积极前瞻
。* 匹配任何字符(换行符除外)
()群组
$ 在一行结尾处断言
i 修饰符:不敏感。不区分大小写的匹配(忽略[a-zA-Z]的情况)
m 修饰符:多行。导致^和$匹配每行的开头/结尾(不仅是字符串的开头/结尾)
在此处测试正则表达式:https://regex101.com/r/iS5jJ3/1
因此,您可以创建一个javascript函数:
示例:
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>
&#13;
答案 2 :(得分:5)
您需要一个OR运算符XslCompiledTransform
:
字符串:|
正则表达式:foo,bar,baz
结果:(foo)|(baz)
答案 3 :(得分:0)
也许你正在寻找这样的东西。如果您想在同时包含“foo”和“baz”时选择完整的行,则此RegEx将遵守:
.*(foo)+.*(baz)+|.*(baz)+.*(foo)+.*