【问题标题】:Inverse for loop to compose search string [duplicate]反向for循环组成搜索字符串[重复]
【发布时间】:2021-07-21 15:32:26
【问题描述】:

我必须检查字符串的某些部分是否包含在更大的字符串中,即用于文本搜索,例如:

let search = "Joe is a good boy"
let text = "One of the better boys is Joe"

如何查看整个字符串或其中的一部分是否包含在文本中? 我试图search.split() 寻找每个拆分的字符串,但这并不好:我想至少搜索字符串上是否存在部分匹配项,例如 “Joe”、“Joe is”、“Joee is a”……等等。

你能给我建议什么功能吗?

【问题讨论】:

  • “字符串的一部分”是什么意思?一个字?一封信?一些子字符串长于...?
  • 一个词,或者一个子串……我猜
  • 您需要创建一个数组,如["Joe is a good boy", "Joe is a good", "is a good boy", "Joe is a", "is a good", ...] 等(所有部分,按长度排序)。然后使用String.prototype.includes 查找第一个匹配项。如果您首先要问的是如何获得这些部件:到目前为止您尝试过什么?

标签: javascript search full-text-search


【解决方案1】:

要检查常用词,您可以将两个字符串转换为词集并计算这些集的交集。

let search = "Joe is a good boy"
let text = "One of the better boys is Joe"


let words = str => new Set(str.split(/\s+/g))

let intersection = (a, b) => [...a].filter(x => b.has(x))

console.log(intersection(words(text), words(search)))

如果您正在寻找 LCS,请查看重复的帖子。

【讨论】:

  • 我不认为 OP 正在寻找任何匹配的词;听起来他们正在寻找搜索字符串中最长的子字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2014-02-17
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多