正则表达式AND运算符

时间:2010-06-14 22:13:23

标签: regex and-operator

基于这个答案

Regular Expressions: Is there an AND operator?

我在http://regexpal.com/上尝试了以下操作,但无法让它发挥作用。缺少什么? javascript不支持吗?

正则表达式:(?=foo)(?=baz)

字符串:foo,bar,baz

4 个答案:

答案 0 :(得分:67)

(?=foo)(?=baz)不可能同时匹配。这将要求下一个字符同时为fb,这是不可能的。

也许你想要这个:

(?=.*foo)(?=.*baz)

这表示foo必须出现在任何地方且baz必须出现在任何地方,不一定按此顺序且可能重叠(尽管在这种特定情况下不可能重叠,因为字母本身不重叠)。

答案 1 :(得分:9)

我在javascript自动完成插件中使用的布尔(AND)加通配符搜索示例:

要匹配的字符串:"我的字"

要搜索的字符串:"我正在本文中搜索我有趣的字词"

您需要以下正则表达式: /^(?=.*my)(?=.*word).*$/im

解释

  

^ 在行的开头声明位置

     

?= 积极前瞻

     

。* 匹配任何字符(换行符除外)

     

()群组

     

$ 在一行结尾处断言

     

i 修饰符:不敏感。不区分大小写的匹配(忽略[a-zA-Z]的情况)

     

m 修饰符:多行。导致^和$匹配每行的开头/结尾(不仅是字符串的开头/结尾)

在此处测试正则表达式:https://regex101.com/r/iS5jJ3/1

因此,您可以创建一个javascript函数:

  1. 替换正则表达式保留字符以避免错误
  2. 在空格处拆分字符串
  3. 将您的单词封装在正则表达式组中
  4. 创建正则表达式
  5. 执行正则表达式匹配
  6. 示例:

    
    
    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;
    &#13;
    &#13;

答案 2 :(得分:5)

您需要一个OR运算符XslCompiledTransform

字符串:|

正则表达式:foo,bar,baz

结果:(foo)|(baz)

答案 3 :(得分:0)

也许你正在寻找这样的东西。如果您想在同时包含“foo”和“baz”时选择完整的行,则此RegEx将遵守:

.*(foo)+.*(baz)+|.*(baz)+.*(foo)+.*