我正在尝试将所有输入的短语(字符)与主数组匹配。我有一个大数组,当用户键入我想要搜索的东西,并且只显示匹配的条目时,例如:如果用户键入益智,那么从我的数组‘我的拼图开始’,‘输入您的拼图’--这两者都应该匹配。
我在这里创建了小提琴,这是我的html代码
Search: <input autocomplete="off" type="text" id="search" /><br />
Results: <input type="text" id="results_count" /><br />
<textarea id="results_text" style="width:300px; height:500px"></textarea>我的js代码
var string =['1234sud','man in puzzle','rocking roll','1232 -powernap','all_broswers'];
$('#search').keyup(function() {
var search = $(this).val();
var resultsText = $('#results_text');
var resultsCount = $('#results_count');
if (!search) {
resultsText.val('');
resultsCount.val('0');
return;
}
var j = 0, results = [],result;
for (var i=0;i<string.length;i++){
var rx = new RegExp('"([*'+search+'*])"','gi');
if (rx.exec(string[i])) {
results.push(string[i]);
j += 1;
if (j >=100)
break;
}
}
//results=string;
resultsText.val(results);
console.log(results)
resultsCount.val(j);
});我无法编写将类型、短语(字符)与数组相匹配并将匹配元素推入结果数组的正则表达式。如有任何帮助,敬请提前感谢。
发布于 2018-01-23 20:35:17
规范案例并使用Array#filter()
$('#search').keyup(function() {
var search = $(this).val().toLowerCase(),
// add validation that search isn't empty, return if it is
// create results array
results = string.filter(function(s){
return s.toLowerCase().indexOf(search)>-1;
})
// do something with results
})发布于 2018-01-23 20:49:07
var string = ['1234sud', 'man in puzzle', 'rocking roll', '1232 -powernap', 'all_broswers'];
$('#search').keyup(function() {
var search = $(this).val();
var resultsText = $('#results_text');
var resultsCount = $('#results_count');
if (!search) {
resultsText.val('');
resultsCount.val('0');
return;
}
var j = 0,
results = [],
result;
for (var i = 0; i < string.length; i++) {
if (string[i].indexOf(search) > -1) {
results.push(string[i]);
j += 1;
if (j >= 100)
break;
}
}
//results=string;
resultsText.val(results);
console.log(results)
resultsCount.val(j);
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
Search: <input autocomplete="off" type="text" id="search" /><br /> Results: <input type="text" id="results_count" /><br />
<textarea id="results_text" style="width:300px; height:500px"></textarea>
使用String.prototype.indexOf()函数,这正是您想要完成的。
发布于 2018-01-23 20:35:36
您最简单的解决方案:不要使用regex。
对于这个特殊的问题,最好使用indexOf查找子字符串的索引。
const words = ['hello', 'jello', 'cake', 'pie'];
const term = 'ello';
const result = words.filter(word => word.indexOf(term) > -1);
console.log(result);
您没有指定,但是如果您只想要单词匹配(与上面的部分单词匹配相反),您可以使用空格填充它。
如果您坚持使用regex,那么您所需要的只是单词本身:
const words = ['hello', 'jello', 'cake', 'pie'];
const term = 'ello';
const result = words.filter(word => (new RegExp(term, 'gi')).test(word));
console.log(result);
你不需要任何花哨的符号或组合什么的。
/ello/的正则表达式只是意思是“在字符串中的任何地方找到这个单词”。因为没有^或$,所以它不受开始或结束的限制,所以不需要通配符。
另外,使用test()而不是exec(),因为test()解析为布尔值,所以对于if语句来说更准确。
同样,如果你想要完整的单词,你可以用/[^\s]word[\s$]/的开始和结尾将它包装在空格中,这意味着“一个空格或短语的开头”和“一个空格或短语的结尾”。
https://stackoverflow.com/questions/48410196
复制相似问题