【问题标题】:Regex Match String That May or May Not Start with "The," "A" or "An"可能或可能不以“The”、“A”或“An”开头的正则表达式匹配字符串
【发布时间】:2014-04-13 18:23:18
【问题描述】:

我正在开发一个乐队搜索引擎,我希望用户无需键入文章即可找到乐队。因此,例如,如果有人想找到“The Black Keys”,他们可以通过键入“Bla”、“Black Keys”、“The Black Keys”或任何类似的变体来找到它们。这是我目前所拥有的:

matcher = new RegExp( '^(?<=the)'+searchstring, 'i' );

【问题讨论】:

  • 你考虑过使用数据库的搜索引擎吗?
  • JavaScript 不支持lookbehind。尝试 matcher = new Regexp( '^(?:the|The)(.*?)' 代替
  • 您是将部分字符串发送到服务器还是过滤已经发送到客户端的数据或在搜索字段中使用自动完成插件?
  • @JasonAller 我正在使用自动完成插件(jQuery-UI's),数据已经发送到客户端

标签: javascript jquery regex regex-lookarounds


【解决方案1】:

这是一个开始:

var tags = ["c++", "java", "the php", "coldfusion", "a javascript", "asp", "the ruby"];
$("#autocomplete").autocomplete({
    source: function (request, response) {
        var matcher = new RegExp("^(?:(the|a) )?" + $.ui.autocomplete.escapeRegex(request.term), "i");
        response($.grep(tags, function (item) {
            return matcher.test(item);
        }));
    }
});

正则表达式修改为:

  • ^ - 单词开头
  • (?: - 开始一个非捕获组
  • (the|a) - 你的文章列表
  • - 单词之间的空格
  • )? 关闭非捕获组并将其设为可选。

一个工作的fiddle

【讨论】:

  • 太完美了!非常感谢!我从来不明白的一件事:我为什么要使用实际空格而不是“\s”?
  • \s 可能是一个很好的改进。我什至在玩正确的方法来使用 `\b` 作为单词边界。
猜你喜欢
  • 1970-01-01
  • 2017-12-25
  • 2015-07-11
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 2019-12-31
  • 2014-08-15
  • 1970-01-01
相关资源
最近更新 更多