【问题标题】:JavaScript string searchJavaScript 字符串搜索
【发布时间】:2013-04-13 20:19:03
【问题描述】:

我正在尝试使用 javaScript 在一个字符串中搜索另一个字符串的任何单词。假设我有以下要搜索的字符串:

"Oxford Street 100 London"

而我的搜索词是这样的:

"oxford london"

上面的搜索词应该给我一个匹配,因为oxfordlondon 是要搜索的字符串的一部分。

我尝试过str.indexOf("oxford london") !== -1,但这不起作用,因为它不是要搜索的字符串中的组合词。

有什么办法吗?

【问题讨论】:

  • 应该匹配,因为这两个词都在其中,还是 1 匹配 - 如果您搜索“oxford manchester”会怎样?
  • 搜索“oxford manchester”也应该得到匹配,因为字符串包含“oxford”:-)
  • new RegExp("oxford london".split(/\W+/).join("|"), 'i') ?

标签: javascript jquery string search


【解决方案1】:

您需要用空格分隔搜索词并搜索每个词(我认为不区分大小写)

var terms = terms.split(' '),
    match = terms.every(function (term) {
        return str.toLowerCase.indexOf(term) > -1;
    });

【讨论】:

  • forEach?你的意思是filter
  • 使用.every 而不是尝试使用forEach 过滤(这甚至不起作用)
  • 是的,我的意思是过滤器,但每个都更好
  • 您应该使用some 而不是every。现在它只有在找到所有键的情况下才是正确的,而the OP said 则必须至少找到一个键。
【解决方案2】:

我会用一个简单的regular expression:

if("London, Oxford street".match(new RegExp("oxford london".split(/\W+/).join("|"), 'i'))) {
    alert("found");   
}

【讨论】:

  • 这并没有使用搜索字符串"oxford london"
  • 另外,不匹配“伦敦,牛津街”
  • 是的,你们是对的,用从 user2264587 窃取的代码更新它。
  • 你好,用if("London,Oford street"...试了一下,还报“找到”。也应该以某种方式修复。
  • 使用regex.test(str) 而不是str.match(regex) !== null
【解决方案3】:
mystring = "Oxford Street 100 London"
search = "oxford london"
// split search string, by space, or by another delimiter if you like
terms = search.split(" ")
matches = false
// loop through all terms, assuming that matches is true if no negative comparisons are made
for(i=0; i< terms.length; i++){
  // make sure you lowercase both search string, and comparison string
  if(mystring.toLowerCase().indexOf(terms[i].toLowerCase())){
    matches = true
  }
}
// matches is true if any terms are found, and false if no term is found

【讨论】:

  • @Archer 未经原作者同意,请勿在帖子中添加如此重大的修改。
  • @RobW 现在错了——没问题。我会按照您喜欢的方式保留它:)
  • @RobW 我想这是偶然的,我同时添加了东西,所以他可能不知道他正在删除我添加的内容
  • @Archer,我可能是错的,但我不认为这是错的。 Matches 开始被假定为 true - 如果任何条款被比较,但不匹配,它变成 false。对我来说,这似乎是一个很好的逻辑。
  • 如果找到任何一个单词,则需要匹配 - 不是两个;)
【解决方案4】:

这行得通:

var str = "Oxford Street 100 London";
var terms = "oxford london";
terms = terms.replace(" ", "|");          // "oxford|london"
var find = new RegExp(terms, "g");        // /oxford|london/g
alert(str.toLowerCase().match(find));     // ["oxford", "london"]

看到这个fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2014-02-09
    • 2013-03-18
    • 2013-11-10
    • 2019-05-12
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多