gpt4 book ai didi

javascript - 在以逗号分隔的列表中进行多次搜索的正则表达式

转载 作者:行者123 更新时间:2023-11-30 12:52:32 24 4
gpt4 key购买 nike

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

例如 this现在,如果我输入“Elaine”,它会显示“Elaine Marley”,现在我想,如果我输入“Elaine, Stan”,它应该返回两个结果“Elaine Marley”和“Stan”。

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

谁能帮我解决正则表达式问题?

谢谢

迪拉杰

最佳答案

阅读前先看一下演示:

// 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 .

关于javascript - 在以逗号分隔的列表中进行多次搜索的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20422335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com