javascript - JS正则表达式名称突出显示

标签 javascript regex

我正在创建一个自动完成功能,但我在突出显示结果时遇到了一点问题。您会看到我的搜索算法非常慷慨并且忽略了结果中的撇号,因此像 joes 这样的查询将匹配 Joe's .搜索算法已经处理完毕,现在是突出显示部分。我想让匹配的图案加粗。

假设我有一个原始的未格式化结果:Joe’s (请注意 rsquo\u2019) 我想这样强调它:<strong>Joe’s</strong> , 对于以下查询 joes , joe's , 和 joe’s (rsquo\u2019)

我在查询中包含了右侧单引号,因为您不知道是否有人从 word 文档或其他内容中复制了查询。

我可以通过忽略引号在搜索/结果字符串中的事实来轻松做到这一点,但是当您不小心输入类似 joes' 的内容时,这会弄乱整个搜索点。甚至更糟jo'es .所以我不知何故需要保留报价位置。另请注意,撇号也可以出现在未格式化的结果字符串中的任何位置,例如 Suq'Ata。 .

以下是场景列表:


  • 字符串:Liliana's
  • 查询:lilianas , liliana's
  • 结果:<strong>Liliana's</strong>

  • 字符串:Suq'Ata
  • 查询:suqat , suq'at
  • 结果:<strong>Suq'At</strong>a

  • 字符串:Telim'Tor's
  • 查询:telimt , telim't
  • 结果:<strong>Telim'T</strong>or's

应该注意的是,查询中引号的位置很重要,而当您在查询中放错引号时,它根本不应该匹配。所以要么你有正确的引号位置,要么根本没有引号来突出显示原始字符串。

我实际上不介意建议的解决方案是否是拆分每个字母并循环遍历它(考虑过),因为我只会在给定时间对最多 5 个字符串执行此操作。我期待着您的建议!

最佳答案

来自提问者的更新问题规范:

  1. 如果用户的查询有引号,它的位置必须与原始字符串的引号匹配。例如。查询“jo'es”与原始字符串“Joe's”不匹配。
  2. 我们只需要将查询的开头与原始字符串的开头进行匹配即可。

我可以想出更好的算法,但要从这里开始,首先要进行快速而肮脏的尝试,对每个字母方法使用朴素循环:

var quotesRegex = /['\u2019]/g;

function highlightMatch(origStr, query) {        
    query = query.toLowerCase();

    var j = 0;
    for (var i = 0; i < query.length; ++i, ++j) {
        // Query has a quote; it needs to be in the same position as origStr
        if (query.charAt(i).match(quotesRegex)) { 
            if (!origStr.charAt(j).match(quotesRegex)) {
                return origStr;  // quote position mismatch
            }
            continue;
        }

        while (origStr.charAt(j).match(quotesRegex)) {
            j++;                
        }

        if (origStr.charAt(j).toLowerCase() != query.charAt(i)) {
            return origStr;
        }
    }

    return "<b>" + origStr.slice(0, j) + "</b>" + origStr.slice(j);
}

JSFiddle:http://jsfiddle.net/FFt2T/6/

关于javascript - JS正则表达式名称突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255679/

相关文章:

javascript - 使用node js关闭.exe文件

javascript - 正则表达式:逗号分隔的字符串(郊区、州、邮政编码)

javascript - 如何通过 JQuery/JavaScript 在新打开的窗口中更新文本

java - Java/Android 中的正则表达式

与 NOT LIKE 等效的 MySQL 正则表达式

javascript - 由于双引号不同,XSS 有效负载未执行

javascript - Promise.all 返回未定义的值

c# - 字符串 "search and replace"使用 .NET 正则表达式

php - 奇怪的 PHP 字符串错误

java - 用于分割字符串的正则表达式