我正在尝试将所有键入的短语(字符)与主数组匹配。我有一个很大的数组,当用户键入我想要搜索我的数组并仅显示匹配条目的内容时,例如:如果用户输入拼图然后从我的数组中输入'我的拼图开始','输入你的拼图'这两者都应该匹配。
我在这里创建了 Fiddle ,这是我的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);
});
我无法编写与数组短语(字符)匹配的正则表达式,并将匹配元素推送到结果数组。任何帮助将提前感谢。
答案 0 :(得分:1)
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()功能,这正是您想要完成的任务。
答案 1 :(得分:0)
答案 2 :(得分:0)
最简单的解决方案:不要使用正则表达式。
对于这个特殊问题,您最好只使用indexOf
查找子字符串的索引。
const words = ['hello', 'jello', 'cake', 'pie'];
const term = 'ello';
const result = words.filter(word => word.indexOf(term) > -1);
console.log(result);
你没有指定,但是如果你只希望单词匹配(与我上面的部分单词匹配相反),你可以用空格填充它。
如果你坚持使用正则表达式,那么你需要的只是单词本身:
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$]/
,这意味着“无论是空格还是短语的开头”和“空格或者空格”短语的结尾“。
答案 3 :(得分:0)
如果您需要完全匹配,请使用String.match:
if (search.match(string[i])) {
results.push(string[i]);
j += 1;
}
或者为不完全匹配的情况动态创建正则表达式:
var rxs = '.*' + search + '.*';
var rx = new RegExp(rxs,'gi');
答案 4 :(得分:0)
也许您想为该任务使用过滤器()。
var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
// const result = words.filter(word => word.indexOf(words.search) >= 0);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
希望这有帮助。
答案 5 :(得分:0)
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
let checkWord = "elite"
words.forEach(x=>{
checkWord.match(new RegExp(x)
})