Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配所有短语并将元素推送到数组_Javascript_Jquery_Arrays_Regex - Fatal编程技术网

Javascript 匹配所有短语并将元素推送到数组

Javascript 匹配所有短语并将元素推送到数组,javascript,jquery,arrays,regex,Javascript,Jquery,Arrays,Regex,我正在尝试将所有键入的短语(字符)与主数组匹配。我有一个很大的数组,当用户键入我想搜索的内容时,我会搜索我的数组并只显示匹配的条目,例如:如果用户键入拼图,那么从我的数组“我的拼图开始”,“输入你的拼图”,这两者都应该匹配 我在这里创建了,这是我的html代码 Search: <input autocomplete="off" type="text" id="search" /><br /> Results: <input type="text" id="resul

我正在尝试将所有键入的短语(字符)与主数组匹配。我有一个很大的数组,当用户键入我想搜索的内容时,我会搜索我的数组并只显示匹配的条目,例如:如果用户键入拼图,那么从我的数组“我的拼图开始”,“输入你的拼图”,这两者都应该匹配

我在这里创建了,这是我的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);
});
var string=['1234sud'、'man in puzzle'、'rocking roll'、'1232-powernap'、'all_broswers';
$(“#搜索”).keyup(函数(){
var search=$(this.val();
var resultsText=$('results_text');
var resultscont=$(“#results_count”);
如果(!搜索){
结果text.val(“”);
结果count.val('0');
回来
}
var j=0,results=[],result;
对于(变量i=0;i=100)
打破
}
}
//结果=字符串;
resultsText.val(结果);
console.log(结果)
结果计算val(j);
});

我无法编写将类型短语(字符)与数组匹配并将匹配元素推送到结果数组的正则表达式。如有任何帮助,我们将不胜感激

规范化案例并使用


最简单的解决方案是:不要使用正则表达式

对于这个特定的问题,最好使用
indexOf
查找子字符串的索引

const words=[“你好”,“果冻”,“蛋糕”,“馅饼];
常量项='ello';
const result=words.filter(word=>word.indexOf(term)>-1);

控制台日志(结果)如果需要精确匹配,请使用String.match:

if (search.match(string[i])) {
  results.push(string[i]);
  j += 1;
}
var rxs = '.*' + search + '.*';
var rx = new RegExp(rxs,'gi');
或为不完全匹配的情况动态创建正则表达式:

if (search.match(string[i])) {
  results.push(string[i]);
  j += 1;
}
var rxs = '.*' + search + '.*';
var rx = new RegExp(rxs,'gi');
var string=['1234sud','manin puzzle','rocking roll','1232-powernap','all_broswers'];
$(“#搜索”).keyup(函数(){
var search=$(this.val();
var resultsText=$('results_text');
var resultscont=$(“#results_count”);
如果(!搜索){
结果text.val(“”);
结果count.val('0');
回来
}
var j=0,
结果=[],
后果
对于(变量i=0;i-1){
结果:推(字符串[i]);
j+=1;
如果(j>=100)
打破
}
}
//结果=字符串;
resultsText.val(结果);
console.log(结果)
结果计算val(j);
});

搜索:
结果:

也许您想为该任务使用筛选器()

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"]


希望这有帮助。

不需要使用
RegExp
。您可以使用
indexOf
函数来收集数组中匹配的字符串。您可以编辑我的小提琴吗?OP不查找精确匹配。看见“if user types puzzle…”谢谢你的回答,但它的意思是TypeError:当我尝试在y项目文件中读取null的属性'indexOf'时,我有非常大的数组要过滤。你运行了这个片段吗?是的,很好,但我的是angularjs数组,所以它会导致任何问题吗?它不应该。尝试进行调试并打印数组的值
console.log(string)[i]
感谢您的响应并回答我的一票。您好,谢谢您的回答,但它的意思是TypeError:无法读取null的属性'indexOf',这是因为我使用的是angularjs数组?请回答:那么你也能看看这个问题吗?我所做的一切都是为了解决这个问题。那个阵列中有洞吗?还是
null
值?为什么在angular应用程序中使用jQuery来处理这些问题?我想使用正则表达式来过滤大数组,是的,数组可能有空值,如果你用bounty检查我的问题,我正在向下滚动加载数据,但搜索不起作用,所以我问了这个问题。好吧,那么将其更改为
返回s&&s.toLowerCase().indexOf(搜索)>-1;。和/或从数组中筛选空值
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
let checkWord = "elite"

words.forEach(x=>{
    checkWord.match(new RegExp(x)
})