Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 突出显示字符串中的匹配单词_Javascript_Regex - Fatal编程技术网

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 然而,当第二个单词包含在第一个单词中时,这就失效

我在Javascript中有以下字符串:

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"