【发布时间】:2019-05-28 21:39:35
【问题描述】:
我正在使用用户输入的查询突出显示搜索结果中的单词。一些结果包含像撇号这样的符号,如果输入或不输入撇号,我想让突出显示工作。所以,如果我有这个搜索结果
帕特里克·奥哈根
用户进入
奥哈根
或者
欧根
它应该与突出显示的部分匹配:Patrick O'Hagan
我想到的实现这一点的一种方法是通过在用户输入的每个字符后插入一个不需要的撇号来构建一个正则表达式,因此查询 ohagan 将被转换为这个正则表达式:
/(o[']?h[']?a[']?g[']?a[']?n[']?)/gi
这可行,但一定有更好的方法吗?
编辑: 我之前提供的示例不清楚,因此我将仅提供一个示例代码,该示例代码应该显示我想要实现的目标:
var resultText = 'Patrick O\'Hagan';
var query1 = 'o\'hagan';
var query2 = 'ohagan';
var regex1 = this.buildRegex(query1);
var regex2 = this.buildRegex(query2);
var highlightedText1 = resultText.replace(regex1, x => `<b>${x}</b>`);
var highlightedText2 = resultText.replace(regex2, x => `<b>${x}</b>`);
console.log(highlightedText1); //prints: Patrick <b>O'Hagan</b>;
console.log(highlightedText2); //prints: Patrick <b>O'Hagan</b>;
我正在寻找的是 buildRegex 函数,该函数将构造一个正则表达式,该表达式将匹配 resultText 中的查询,但会忽略撇号。
【问题讨论】:
-
是的,
new RegExp(search.replace(/'/g, ''), 'i')。从搜索文本中删除所有'。 -
我需要用撇号突出显示原始字符串。我可能误解了您要说的内容,但我认为您建议只从搜索结果和搜索查询中删除撇号?
-
然后使用includes方法。如果 string.includes(“‘”) {做某事}
-
您究竟想如何用撇号“突出显示”子字符串?
-
那么请编辑问题以解释您真正想要实现的目标。
标签: javascript regex