Javascript 突出显示字符串中的匹配单词
我在Javascript中有以下字符串:Javascript 突出显示字符串中的匹配单词,javascript,regex,Javascript,Regex,我在Javascript中有以下字符串: Smith, Dan 我有一些Javascript来突出显示字符串中与基于用户搜索输入的单词数组相匹配的部分。因此,如果用户键入smith d,那么我的数组和预期输出将包含: string = "Smith, Dan" word[0] = "smith" word[1] = "d" output: <em>Smith</em>, <em>D</em>an 然而,当第二个单词包含在第一个单词中时,这就失效
Smith, Dan
我有一些Javascript来突出显示字符串中与基于用户搜索输入的单词数组相匹配的部分。因此,如果用户键入smith d,那么我的数组和预期输出将包含:
string = "Smith, Dan"
word[0] = "smith"
word[1] = "d"
output: <em>Smith</em>, <em>D</em>an
然而,当第二个单词包含在第一个单词中时,这就失效了。例如,如果字符串是Smith,Helen,则发生以下情况:
string = "Smith, Helen"
word[0] = "smith"
word[1] = "h"
output: <em>Smit<em>h</em></em>, <em>H</em>elen
我使用正则表达式进行替换,因为需要保持源文本大小写相同,因此如果用户键入smith,我仍然会得到smith返回
这是我的密码:
var output = "Smith, Helen";
var arText = new Array();
arText[0] = "smith";
arText[1] = "h";
for (var iw = 0; iw < arText.length; iw++) {
var term = arText[iw];
var re = new RegExp('(' + term + ')', 'gi');
output = output.replace(re, '<em>$1</em>');
}
有人能建议我如何修改它,使它忽略已经在em标记中的单词吗?我希望上述代码的输出为:
<em>Smith</em>, <em>H</em>elen
看起来您的搜索与单词边界有关。我不知道您所有的边缘情况,但是对现有代码的添加确实会返回您所寻求的输出。只要搜索与换行有关,它也应适用
var output = "Smith, Helen";
var arText = new Array();
arText[0] = "smith";
arText[1] = "h";
for (var iw = 0; iw < arText.length; iw++) {
var term = arText[iw];
var re = new RegExp('(\\b' + term + ')', 'gi');
output = output.replace(re, '<em>$1</em>');
}// notice the \\b which means look for term by line break. double escape for string.
输出
另一个更复杂的例子
var output = "Smith, Helen butter";
var arText = new Array();
arText[0] = "smith";
arText[1] = "h";
arText[2] = "bu";
for (var iw = 0; iw < arText.length; iw++) {
var term = arText[iw];
var re = new RegExp('(\\b' + term + ')', 'gi');
output = output.replace(re, '<em>$1</em>');
}
输出
var output = "Smith, Helen butter";
var arText = new Array();
arText[0] = "smith";
arText[1] = "h";
arText[2] = "bu";
for (var iw = 0; iw < arText.length; iw++) {
var term = arText[iw];
var re = new RegExp('(\\b' + term + ')', 'gi');
output = output.replace(re, '<em>$1</em>');
}
"<em>Smith</em>, <em>H</em>elen <em>bu</em>tter"