首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配所有短语并将元素推送到数组

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

Stack Overflow用户
提问于 2018-01-23 20:24:30
回答 6查看 1.1K关注 0票数 0

我正在尝试将所有输入的短语(字符)与主数组匹配。我有一个大数组,当用户键入我想要搜索的东西,并且只显示匹配的条目时,例如:如果用户键入益智,那么从我的数组‘我的拼图开始’,‘输入您的拼图’--这两者都应该匹配。

我在这里创建了小提琴,这是我的html代码

代码语言:javascript
复制
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代码

代码语言:javascript
复制
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);
});

我无法编写将类型、短语(字符)与数组相匹配并将匹配元素推入结果数组的正则表达式。如有任何帮助,敬请提前感谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-01-23 20:35:17

规范案例并使用Array#filter()

代码语言:javascript
复制
$('#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


})
票数 0
EN

Stack Overflow用户

发布于 2018-01-23 20:49:07

代码语言:javascript
复制
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);
});
代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 2018-01-23 20:35:36

您最简单的解决方案:不要使用regex。

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

代码语言:javascript
复制
const words = ['hello', 'jello', 'cake', 'pie'];
const term = 'ello';

const result = words.filter(word => word.indexOf(term) > -1);
console.log(result);

您没有指定,但是如果您只想要单词匹配(与上面的部分单词匹配相反),您可以使用空格填充它。

如果您坚持使用regex,那么您所需要的只是单词本身:

代码语言:javascript
复制
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$]/的开始和结尾将它包装在空格中,这意味着“一个空格或短语的开头”和“一个空格或短语的结尾”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48410196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档