正则表达式javascript - 匹配多个搜索词忽略他们的顺序

Ran*_*nch 5 javascript regex

我想在字符串中找到给定字符串(除以空格)的所有匹配项.(例如,iTunes搜索框的工作方式).

例如," ab de "和" de ab "都将在" abcde " 上返回true (也是" bc ea "或任何顺序应该返回true)

如果我用外卡替换空格,"ab*de"将在" abcde " 上返回true ,而不是"de*ab".[我使用*而不是Regex语法仅用于此解释]

我找不到任何纯正的Regex解决方案.我能想到的唯一解决方案是拆分搜索词并运行多个正则表达式.

是否有可能找到涵盖所有这些选项的纯正Regex表达式?

Roc*_*oC5 5

我很确定你可以想出一个正则表达式来做你想做的事,但这可能不是最有效的方法。

例如,正则表达式模式(?=.*bc)(?=.*e)(?=.*a)将匹配任何包含字符串bce a

var isMatch = 'abcde'.match(/(?=.*bc)(?=.*e)(?=.*a)/) != null; // equals true

var isMatch = 'bcde'.match(/(?=.*bc)(?=.*e)(?=.*a)/) != null; // equals false
Run Code Online (Sandbox Code Playgroud)

您可以编写一个函数来根据您的搜索词动态创建表达式,但它是否是完成您正在做的事情的最佳方式是另一个问题。


Kar*_*ler 5

true当文本中出现a的所有部分(除以,' ')时返回searchString.否则false返回.

filter(text, searchString) {
    const regexStr = '(?=.*' + searchString.split(/\,|\s/).join(')(?=.*') + ')';
    const searchRegEx = new RegExp(regexStr, 'gi');
    return text.match(searchRegEx) !== null;
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*nov 3

尝试这个:

var str = "your string";
str = str.split( " " );
for( var i = 0 ; i < str.length ; i++ ){
    // your regexp match
}
Run Code Online (Sandbox Code Playgroud)