使用变音符号突出显示句子中的特定单词

时间:2016-02-03 12:22:57

标签: javascript regex diacritics

我正在寻找一些改进,特别是在正则表达式中,我突出显示字符串中的特定单词。情况如下:

  • 我的数据库中存有关键字,没有任何变音符号,
  • 用户带有一个带有diatrics的字符串,
  • 我发现关键字与我的字符串之间的匹配已修改,因此它不包含任何变音符号,
  • 我用diacritrics高亮显示原句中匹配的单词。
var sentence = "J'eusse été amélioré sans des aigÜs si hauts améliorés et raisonnable. Amélioration réaméliorée";
var word = ['eusse','ameliore','aigu','aimerais']; //Matched keywords extracted from database where there are stored without diacritrics

var new_s = sentence, match, output, nb = 0, index = [];
var new_s_cache = removeDiacritics(sentence).replace("'"," ");

for (var i=0;i<word.length;i++){// For each matched word it stores its position and length in the array called index
          var wordInput = word[i].substr(0,4);
          var re = new RegExp("(?:^|\\W)"+wordInput+"(\\w*)(?!\\w)","gi");
          while (match = re.exec(new_s_cache)) {
            index.push([match.index,match[0].length]);
          }
        }
index.sort(); // Sort index so that it highlights word in the right order
        for (var j=0;j<index.length;j++) { //It hightlights the word in the orginal sentence with diatrics
new_s = new_s.substr(0,index[j][0]+1+nb) + "<b>" + new_s.substr(index[j][0]+1+nb,index[j][1]) + "</b>" + new_s.substr(index[j][0]+index[j][1]+1+nb);
            nb = nb + 7; // take into account the "<b></b>" length
        }

output = new_s ;

我在哪里寻找改进措施?

  • 正则表达式:我想抓住与关键字类似的单词。这就是为什么我把4个首字母任意一个然后运行正则表达式来找到包含这4个字母的单词,但这并不是最佳的。事实上,例如,当关键字为“批准”时,我想找到“未批准”。
  • 代码的概念:原始句子与没有变音符号的句子之间的混淆似乎非常脆弱。

这是JSfiddle:https://jsfiddle.net/qqabomsg/3/

提前致谢!

0 个答案:

没有答案