Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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_Search - Fatal编程技术网

Javascript 搜索字符串并返回找到的单词

Javascript 搜索字符串并返回找到的单词,javascript,search,Javascript,Search,我想在字符串中搜索数组书中找到的单词,并返回找到的单词。我删除了特殊字符。但我不知道如何搜索字符串。搜索返回-1 <script> var books = ['Genesis', 'Exodus', 'Leviticus', 'Numbers', 'Deuteronomy', 'Joshua', 'Judges' , 'Ruth', 'Samuel', 'Samuel', 'Kings', 'Kings', 'Chronicles', 'Chronicles', 'Ez

我想在字符串中搜索数组书中找到的单词,并返回找到的单词。我删除了特殊字符。但我不知道如何搜索字符串。搜索返回-1

       <script>
var books = ['Genesis', 'Exodus', 'Leviticus', 'Numbers', 'Deuteronomy', 'Joshua', 'Judges'
, 'Ruth', 'Samuel', 'Samuel', 'Kings', 'Kings', 'Chronicles', 'Chronicles', 'Ezra', 'Nehemiah',
'Esther', 'Job', 'Psalms', 'Proverbs', 'Ecclesiastes', 'Song of Solomon', 'Isaiah', 'Jeremiah',
'Lamentations', 'Ezekiel', 'Daniel', 'Hosea', 'Joel', 'Amos', 'Obadiah', 'Jonah', 'Micah',
'Nahum', 'Habakkuk', 'Zephaniah', 'Haggai', 'Zechariah', 'Malachi', 'Matthew',
'Mark', 'Luke', 'John', 'Acts', 'Romans', 'Corinthians', 'Galatians', 'Ephesians', 'Philippians',
'Colossians', 'Thessalonians', 'Timothy', 'Timothy', 'Titus', 'Philemon', 'Hebrews', 'James',
'Peter', 'Peter', 'John', 'Jude', 'Revelation'];



var puzzle = 'Can you find the names of 25 books of the Bible in this paragraph? This is a most remarkable puzzle.\
 Someone found it in the seat pocket on a flight from Los Angeles to Honolulu, keeping himself occupied for hours.\
  One man from Illinois worked on this while fishing from his john boat. Roy Clark studied it while playing his banjo. \
  Elaine Victs mentioned it in her column once. One woman judges the job to be so involving, she brews a cup of tea to \
  help calm her nerves. There will be some names that are really easy to spot that’s a fact. Some people will soon find \
  themselves in a jam, especially since the book names are not necessarily capitalized. The truth is, from answers\
  we get, we are forced to admit it usually takes a minister or scholar to see some of them at the worst. \
  Something in our genes is responsible for the difficulty we have. Those able to find all of them will hear \
  great lamentations from those who have to be shown. One revelation may help, books like! Timothy and Samuel \
  may occur without their numbers. And punctuation or spaces in the middle are normal. \
  A chipper attitude will help you compete. Remember, there are 25 books of the Bible lurking \
 somewhere in this paragraph. Greater love hath no man than this, that a man lay down his life for his friends. John 15:13.';
// Remove punctuation and spaces and set to lowercase

var matcher = /[a-z]+/gi;
var matches = puzzle.match(matcher);
var result = matches.join('');
var results = result.toLowerCase();
books = books.map(function (e) {
    return e.toLowerCase();
  });

//Search results for books and return those found
var i;
for (i = 0; i < books.length; i++) {
  var found =  puzzle.search(books)
  console.log(found);
}
      </script>

var books=[《创世记》、《出埃及记》、《利未记》、《数字》、《申命记》、《约书亚》、《法官》
,“路得”,“撒母耳”,“撒母耳”,“国王”,“历代志”,“历代志”,“以斯拉”,“尼希米”,
以斯帖、约伯、诗篇、箴言、传道书、所罗门之歌、以赛亚、耶利米、,
《哀歌》,《以西结》,《但以理》,《何西阿》,《约珥》,《阿摩司》,《俄巴底亚》,《约拿》,《弥迦》,
“那鸿”、“哈巴谷”、“西番雅”、“哈该”、“撒迦利亚”、“玛拉基”、“马太”,
马可福音、路加福音、约翰福音、使徒行传、罗马人、哥林多人、加拉太人、以弗所人、腓立比人、,
《歌罗西书》、《帖撒罗尼迦书》、《提摩太书》、《提摩太书》、《提多书》、《腓利门书》、《希伯来书》、《雅各书》,
“彼得”、“彼得”、“约翰”、“裘德”、“启示录”];
var puzzle='你能在这段中找到圣经中25本书的名字吗?这是一个非常值得注意的难题\
在从洛杉矶飞往檀香山的航班上,有人在座位口袋里发现了它,让自己忙了好几个小时\
一个来自伊利诺伊州的人在他的船上钓鱼时做了这个。罗伊·克拉克在演奏班卓琴时研究了它\
伊莱恩·维克斯曾在她的专栏中提到过这一点。一位女士认为这项工作涉及面很广,她冲了一杯茶给她\
帮助她镇定下来。会有一些名字很容易辨认,这是事实。有些人很快就会发现\
他们自己陷入困境,尤其是因为书名不一定大写。事实是,从答案来看\
我们不得不承认,在最糟糕的情况下,通常需要一位部长或学者才能看到他们中的一些人\
我们基因中的某些东西导致了我们的困难。那些能够找到他们所有人的人将会听到\
那些必须要表现出来的人的巨大哀悼。一个启示可能会有所帮助,像这样的书!提摩太和塞缪尔\
可能在没有数字的情况下发生。中间的标点或空格是正常的。
乐观的态度有助于你竞争。记住,有25本圣经的书潜伏着\
在这一段的某个地方。人为朋友舍命,没有比这更大的爱了。约翰福音15:13;
//删除标点和空格并设置为小写
变量匹配器=/[a-z]+//gi;
var matches=puzzle.match(匹配器);
var result=matches.join(“”);
var results=result.toLowerCase();
books=books.map(函数(e){
返回e.toLowerCase();
});
//搜索图书结果并返回找到的图书
var i;
对于(i=0;i
试试看


由于这是一个小小的谜题,下面是如何解决它的算法:

  • puzzle
    字符串中,应删除除字母以外的所有字符
  • puzzle
    字符串中,将所有字母移动为小写
  • books
    数组中的所有书籍也移动为小写
  • 对于
    books
    数组中的每个元素,您应该使用
    puzzle.search(book)
    。如果结果为非负数,则本书为文本
  • 将所有结果非负面的书籍收集到新数组中
  • 最后两个步骤可以使用
    for
    循环或
    reduce
    方法for
    books
    数组来完成。下面是一个示例,说明了如何执行此操作:

    puzzle = puzzle.replace(/\W/g,'').toLowerCase();
    
    let result = [];
    
    for(let i = 0; i < books.length; i++) {
      const index = puzzle.search(books[i].toLowerCase());
      if(index >= 0 && result.indexOf(books[i]) == -1) {
        result.push(books[i]);
      }
    }
    
    console.log(result);
    console.log(result.length);
    
    puzzle=puzzle.replace(/\W/g',).toLowerCase();
    让结果=[];
    for(设i=0;i=0&&result.indexOf(图书[i])=-1){
    结果.推(书[i]);
    }
    }
    控制台日志(结果);
    console.log(结果.长度);
    
    如果您在声明
    puzzle
    后立即使用此代码,它应该可以工作

    你可以做循环和映射,或者你可以用正则表达式得到答案

    我只在Chrome开发者工具窗口中测试过这个,但无论它在哪里运行都应该可以

    第一行构建了一个不区分大小写的正则表达式对象,它将搜索使用它的整个字符串。如果您使用了
    console.log(reg)
    ,它看起来会像这样
    /(book1 | book2 | book3 |…)/gi


    第二行接受
    puzzle
    ,删除所有非单词字符(
    puzzle.replace(/[^\w]/g,”)
    ),然后匹配第1行上构建的正则表达式(
    .match(reg)
    )。

    “查找数组中也在字符串中的所有单词”搜索字符串“puzzle”从数组“books”中查找单词如果你读字符串,你会看到我在做什么。它只找到蒂莫西还有24个单词要找到好的,我可能在4和5方面有点问题,但我有了它后会重新发布updated@user163169我刚刚在回答中添加了可能的解决方案,检查它修复了一点以获得正确的答案,因为
    books
    数组中的一些名称重复,但只找到9本书。这很令人费解。非常感谢您的帮助。再次修复了代码。我刚查过,它正好归还了25本书
    puzzle = puzzle.replace(/\W/g,'').toLowerCase();
    
    let result = [];
    
    for(let i = 0; i < books.length; i++) {
      const index = puzzle.search(books[i].toLowerCase());
      if(index >= 0 && result.indexOf(books[i]) == -1) {
        result.push(books[i]);
      }
    }
    
    console.log(result);
    console.log(result.length);
    
    let reg = new RegExp('(' + books.join('|') + ')', 'gi');
    let answer = puzzle.replace(/[^\w]/g,'').match(reg);
    console.log(answer);