Regex 正则表达式和运算符

Regex 正则表达式和运算符,regex,and-operator,Regex,And Operator,基于这个答案 我试了一下,但没能成功。我错过了什么?javascript不支持它吗 正则表达式:(?=foo)(?=baz) 字符串:foo,bar,baz不可能同时匹配(?=foo)和(?=baz)。它要求下一个字符同时是f和b,这是不可能的 也许你想要这个: (?=.*foo)(?=.*baz) 这意味着foo必须出现在任何地方,而baz必须出现在任何地方,不一定按该顺序出现,也可能重叠(尽管在这种特定情况下不可能重叠,因为字母本身不重叠)。可能只是一个OR运算符|就足以解决您的问题:

基于这个答案

我试了一下,但没能成功。我错过了什么?javascript不支持它吗

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


字符串:
foo,bar,baz
不可能同时匹配
(?=foo)
(?=baz)
。它要求下一个字符同时是
f
b
,这是不可能的

也许你想要这个:

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

这意味着
foo
必须出现在任何地方,而
baz
必须出现在任何地方,不一定按该顺序出现,也可能重叠(尽管在这种特定情况下不可能重叠,因为字母本身不重叠)。

可能只是一个OR运算符
|
就足以解决您的问题:

字符串:
foo、bar、baz

正则表达式:
(foo)|(baz)


结果:
[“foo”,“baz”]

也许你正在寻找类似的东西。如果您想选择同时包含“foo”和“baz”的完整行,此正则表达式将符合以下要求:

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

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

要匹配的字符串:
“我的单词”

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

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

解释:

^在行首断言位置

?=正向前瞻

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

()

$在行尾断言位置

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

m修改器:多行。使^和$匹配每行的开始/结束(不仅仅是字符串的开始/结束)

在此处测试正则表达式:

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

  • 替换正则表达式保留字符以避免错误
  • 在空格处拆分字符串
  • 将您的单词封装在正则表达式组中
  • 创建正则表达式模式
  • 执行正则表达式匹配
  • 例如:

    函数fullTextCompare(myWords,toMatch){
    //替换正则表达式保留字符
    myWords=myWords.replace(/[-\/\\^$*+?.()\[\]{}]/g,\\$&');
    //在空格处拆分字符串
    arrWords=myWords.split(“”);
    //将您的单词封装在正则表达式组中
    arrWords=arrWords.map(函数(n){
    返回[“(?=*”+n+”)];
    });
    //创建正则表达式模式
    sRegex=newregexp(“^”+arrWords.join(“”+“*$”,“im”);
    //执行正则表达式匹配
    返回(toMatch.match(sregx)==null?false:true);
    }
    //使用它:
    console.log(
    fullTextCompare(“我的单词”,“我正在搜索本文中有趣的单词”)
    );
    //通配符:
    console.log(
    fullTextCompare(“ywo”,“我正在搜索本文中的有趣单词”)
    
    );我刚试过。没有雪茄。也许这是regexpal的一个bug?@ghee22:正则表达式工作得很好,但使用regexpal可能不是测试它的最佳方法,因为没有关于匹配是否成功的可见反馈(它是零宽度匹配)。请尝试在Javascript控制台中运行它,或者在表达式末尾添加
    *
    。这在Javascript中肯定有效,但在regexpal.com中不起作用。问题是关于和逻辑。如果只有一个或另一个单词存在,则带有交替的OR逻辑(
    |
    )也将匹配,这不是目的-两者都必须存在。@mklement0您完全正确。我只提供了一个可能也有用的选择。