我想在字符串中找到给定字符串(除以空格)的所有匹配项.(例如,iTunes搜索框的工作方式).
例如," ab de "和" de ab "都将在" abcde " 上返回true (也是" bc ea "或任何顺序应该返回true)
如果我用外卡替换空格,"ab*de"将在" abcde " 上返回true ,而不是"de*ab".[我使用*而不是Regex语法仅用于此解释]
我找不到任何纯正的Regex解决方案.我能想到的唯一解决方案是拆分搜索词并运行多个正则表达式.
是否有可能找到涵盖所有这些选项的纯正Regex表达式?
我很确定你可以想出一个正则表达式来做你想做的事,但这可能不是最有效的方法。
例如,正则表达式模式(?=.*bc)(?=.*e)(?=.*a)将匹配任何包含字符串bc,e,和 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)
您可以编写一个函数来根据您的搜索词动态创建表达式,但它是否是完成您正在做的事情的最佳方式是另一个问题。
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)
尝试这个:
var str = "your string";
str = str.split( " " );
for( var i = 0 ; i < str.length ; i++ ){
// your regexp match
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18400 次 |
| 最近记录: |