【问题标题】:Optimising my greedy fuzzy search regex: limit it to words (separated by whitespace)优化我的贪婪模糊搜索正则表达式:将其限制为单词(由空格分隔)
【发布时间】:2019-12-15 02:27:48
【问题描述】:

我有一个产生太多结果的自动完成,因为我使用了一个非常贪婪的模糊搜索正则表达式模式:它只是查找所有输入的字符出现在任何地方(以相同的顺序)。只需将.*? 添加到每个输入的字符即可。

在以下示例中,键入 auto cont 会生成正则表达式 a.*?u.*?t.*?o.*? .*?c.*?o.*?n.*?t.*? 并产生:

  • A链接图形的替代文本 must 描述链接目标 or 用途 - 1.1.1 非文本 Content - A
  • Autocompletes 必须以可访问的方式实现 - 4.1.2a 高级 controls(小部件)
  • Breadcrumbs 或 progress indicators 必须是 recognizable non-visually - 1.3.1 信息和 Relationships - A

当自动完成主要包含非常短的选项时,这非常有用,但对于较长的选项,它往往会令人困惑,并且不允许以快速而有意义的方式缩小选项范围。

所以我想改变行为:从现在开始,空格应该限制搜索,因此用户可以输入许多术语(由空格分隔)并且每个术语仅与选项中的另一个术语匹配。

这意味着,在上面的示例中,仍然应该找到第二个选项,因为两个输入的术语(autocont)都作为选项中的术语存在(由空格分隔):

  • Autocompletes 必须以可访问的方式实现 - 4.1.2a 高级 controls(小部件)

顺便说一句,搜索应该仍然是模糊的,所以输入类似atc trl 的内容应该仍然会产生结果。

【问题讨论】:

    标签: regex autocomplete fuzzy-search


    【解决方案1】:

    顺便说一下,搜索应该还是模糊的,所以输入一些东西 像 atc trl 应该仍然产生结果。

    我认为这里的贪婪是上面的这个逻辑。在我能想到的大多数情况下,这种模糊程度只会产生太多结果。

    如果您想查找仅包含单个单词中的术语列表的结果,如下所示:

    • 匹配结果:自动自动继续滚动
    • 不匹配结果:blau topless disco ntp 协议

    你可以使用这个简单的正则表达式:(auto)|(cont)

    这也将匹配具有 2 个中的任何一个的结果,但您可以按每组找到的项目数对它们进行排序,以使最相关的结果位于顶部。

    【讨论】:

    • 感谢您提供这个有用的答案。关于上面的“太贪婪”的逻辑:在德语中,很多单词是由单个单词串联而成的,例如“Landtier”(土地+Tier)或“Meerestier”(Meer+Tier)。在这种情况下,能够搜索“meti”并找到“Meerestier”或搜索“tier”以获得“Landtier”和“Meerestier”是很有用的。因此,就我而言,我希望将我非常贪婪的模糊搜索保持在单个单词内。
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2017-07-16
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多