正则表达式与操作符

基于这个答案

正则表达式: 有 AND 操作符吗?

我在 http://regexpal.com/上尝试了以下方法,但无法使其工作。少了什么?Javascript 不支持吗?

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

字符串: foo,bar,baz

261903 次浏览

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

也许你想要的是这个:

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

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

也许一个或操作员 |就足以解决你的问题:

字符串: foo,bar,baz

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

结果: ["foo", "baz"]

也许你正在寻找这样的东西。如果您希望选择同时包含“ foo”和“ baz”的完整行,此正则表格将遵守以下规定:

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

一个布尔值(AND)加通配符搜索的例子,我正在一个 javascript 自动完成插件中使用它:

匹配字符串: "my word"

要搜索的字符串: "I'm searching for my funny words inside this text"

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

解释:

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

积极向前看

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

() 组别

$ 断言行尾的位置

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

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

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

所以,你可以创建一个 javascript 函数:

  1. 替换正则表达式保留字符以避免错误
  2. 在空格处拆分字符串
  3. 将单词封装在正则表达式组中
  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 = arrWords.map(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")
);