繁体   English   中英

用逗号分隔的列表中的多个搜索的正则表达式

[英]regular expression for multiple search in list seperated by comma

我有一个类似于的列表,它使用简单的正则表达式,现在我的要求是添加一个逗号分隔的多个搜索选项。

例如,在 ,如果我输入“伊莲”现在右它为我“伊莱恩马利”,现在我想,如果我输入“伊莱恩,斯坦”,它应该返回我的两个结果“伊莱恩马利”和“斯坦”。

如果需要更多详细信息,请告诉我,任何帮助将不胜感激。

任何人都可以帮我正则表达式吗?

谢谢

DHIRAJ

在阅读之前先看看演示:

 // http://stackoverflow.com/a/3561711/1636522 RegExp.escape = function(s) { return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'); }; // vars var span = getEl('span'), input = getEl('input'), li = getEls('li'), tid; // onkeyup addEventSimple(input, 'keyup', function(e) { // cancels previous query tid && clearTimeout(tid); // waits 250ms then filters tid = setTimeout(function() { tid = null; span.textContent = +span.textContent + 1; filter(e.target.value); }, 250); }); // filtering function filter(input) { var i = 0, l = li.length, re = input && toRegex(input), el; for (; i < l; i++) { el = li[i]; // list item if (!re || re.test(el.textContent)) { el.style.display = 'list-item'; } else { el.style.display = 'none'; } } } // input > regex function toRegex(input) { input = RegExp.escape(input); input = input.match(/[^,\\s]+(\\s+[^,\\s]+)*/g) || []; input = input.join('|'); return new RegExp(input, 'i'); } // http://www.quirksmode.org/js/eventSimple.html function addEventSimple(obj, evt, fn) { if (obj.addEventListener) obj.addEventListener(evt, fn, false); else if (obj.attachEvent) obj.attachEvent('on' + evt, fn); } // helpers function getEl(tag) { return getEls(tag)[0]; } function getEls(tag) { return document.getElementsByTagName(tag); } 
 <input type="text" placeholder="Example : &quot;nn, oo, ca&quot;." /> <div style="padding:.5em .5em 0">Filtered <span>0</span> times.</div> <ul> <li>Guybrush Threepwood</li> <li>Elaine Marley</li> <li>LeChuck</li> <li>Stan</li> <li>Voodoo Lady</li> <li>Herman Toothrot</li> <li>Meathook</li> <li>Carla</li> <li>Otis</li> <li>Rapp Scallion</li> <li>Rum Rogers Sr.</li> <li>Men of Low Moral Fiber</li> <li>Murray</li> <li>Cannibals</li> </ul> 

这里我只公开toRegex函数。 假设我们输入了以下值:“el,le,az”。

var regex = toRegexp('el, le, az'); // regex = /el|le|az/i
regex.test('Elaine'); // true  -> show
regex.test('Marley'); // true  -> show
regex.test('Stan');   // false -> hide

得到的正则表达式( /el|le|az/i )表示:搜索“el”或“le”或“az”, i查看案例(允许“EL”,“Le”或“aZ”) )。 现在,让我们逐行阅读这个功能:

input = RegExp.escape(input); // http://stackoverflow.com/q/3561493/1636522
input = input.match(/[^,\s]+(\s+[^,\s]+)*/g) || []; // ["el", "le", "az"]
input = input.join('|'); // "el|le|az"
return new RegExp(input, 'i'); // /el|le|az/i

让我们进一步了解/[^,\\s]+(\\s+[^,\\s]+)*/g

[^,\s]+         any char except comma and whitespace, one or more times
(\s+[^,\s]+)*   one or more whitespaces + same as above, zero or more times
g               grab all occurrences

使用愚蠢输入的用法示例:

'a,aa,aa a, b , bb , bb b , , '.match(/[^,\s]+(\s+[^,\s]+)*/g);
// ["a", "aa", "aa a", "b", "bb", "bb b"]

而已 ! 希望足够清楚:-)

进一步阅读: http//www.javascriptkit.com/javatutors/redev.shtml

这是你需要的正则表达式: /([a-zA-Z\\s]+),?/

也许你可以尝试这种模式:

(艾琳)|(斯坦)

我记得,'|' char用于扩展正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM