基于这个答案

正则表达式:是否有操作员?

我尝试了以下内容 http://regexpal.com/ 但是无法使它工作。缺少什么? JavaScript不支持它吗?

REGEX: (?=foo)(?=baz)

细绳: foo,bar,baz

有帮助吗?

解决方案

两者都是不可能的 (?=foo)(?=baz) 同时匹配。这需要下一个角色是 fb 同时这是不可能的。

也许您想要这个:

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

这就是这样 foo 必须出现在任何地方, baz 必须出现在任何地方,不一定按顺序和可能重叠(尽管在这种特定情况下都是不可能的,因为字母本身不会重叠)。

其他提示

Boolean(and)和通配符搜索的示例,我在JavaScript Autococterete插件中使用的示例:

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

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

您需要以下言论:/^(?=.*my)(?=.*word).*$/im

解释:

^ 主张一条线开始的位置

?= 积极的lookahead

.* 匹配任何字符(Newline除外)

() 小组

$ 断言一条线的立场

一世 修饰符:不敏感。病例不敏感的匹配(忽略[A-ZA-Z]的情况)

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

在此处测试正则条件: https://regex101.com/r/is5jj3/1

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

  1. 更换正则保留字符以避免错误
  2. 在空间上拆分绳子
  3. 将您的单词封装在Regex组中
  4. 创建正则模式
  5. 执行正则比赛

例子:

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)+.*

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top