用于在列表中进行多重搜索的正则表达式,用逗号分隔
regular expression for multiple search in list seperated by comma
我有一个类似于此的列表,它适用于简单的正则表达式,现在我的要求是添加一个逗号分隔的多重搜索选项。
例如,在这个例子中,如果我现在键入"Elaine",它会显示我"Elaine-Marley",现在我想要,如果我键入"Elain,Stan",它应该会返回两个结果"Elaine-Marley"&"斯坦"。
请让我知道,如果需要更多的细节,任何帮助都将不胜感激。
有人能帮我做正则表达式吗?
感谢
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 : "nn, oo, ca"." />
<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]+),?/
也许你可以试试这个模式:
(Elaine)|(Stan)
我记得,"|"字符用于扩展正则表达式。
相关文章:
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 匹配正则表达式不分隔大写或不大写
- 用于在列表中进行多重搜索的正则表达式,用逗号分隔
- javascript正则表达式,用于逗号分隔的数字重复
- 乌克兰字母的正则表达式.如何用大写字母分隔西里尔语单词
- 正则表达式用于逗号分隔浮点数的列表
- 如何获取在Javascript正则表达式中用正斜杠分隔的字符串的一部分
- 正则表达式表示用连字符分隔的浮点范围(用于年份和月份)
- 正则表达式在开始时将字符串与(逗号分隔的)数字匹配,并拆分为数字和其余
- 正则表达式以匹配逗号分隔的主机名
- javascript 正则表达式验证列表以逗号分隔
- Javascript 正则表达式用于逗号分隔字符串
- Javascript - 正则表达式,用于字母,数字,下划线逗号分隔的标签
- 如何制作正则表达式以匹配逗号分隔的列表,列表中最多包含 5 个项目
- 需要正则表达式在用冒号分隔之前和之后获取字符串
- 正则表达式 javascript 用于检查逗号分隔的数字
- 删除逗号分隔的字符串并将其替换为JavaScript正则表达式
- 正则表达式替换以空格分隔的整数
- 带有固定字符串和一些用连字符分隔的变量的Javascript正则表达式
- 在excel列上应用正则表达式后创建逗号分隔的文本