我正在使用以下功能来突出显示某些单词,并且英语效果很好
function highlight(str,toBeHighlightedWord)
{
toBeHighlightedWord="(\\b"+ toBeHighlightedWord.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1")+ "\\b)";
var r = new RegExp(toBeHighlightedWord,"igm");
str = str.replace(/(>[^<]+<)/igm,function(a){
return a.replace(r,"<span color='red' class='hl'>$1</span>");
});
return str;
}
但它不适用于阿拉伯文字
因此,如何修改正则表达式以匹配阿拉伯语单词和带有tashkel的阿拉伯语单词,其中tashkel是在原始字符之间添加的字符,例如:“محمد”这个不带tashkel的“ مُحَمَّدُ”和tashkel这个单词的装饰和这些小标记是字符
在Javascript中,您只能将字边界\b
与以下字符一起使用:[a-zA-Z0-9_]
。后向断言在这里也没有用,因为Javascript不支持此功能。
解决问题并“模拟”一种字词边界的方法是对要突出显示的字符使用否定的字符类(因为它是否定的字符类,它将匹配不能包含在字符集内的字符。单词。)在左边界的捕获组中。对于右侧,负面的前瞻将非常简单。
toBeHighlightedWord="([^\\w\\u0600-\\u06FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]|^)("
+ toBeHighlightedWord.replace(/([{}()[\]\\.?*+^$|=!:~-])/g, "\\$1")
+ ")(?![\\w\\u0600-\\u06FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF])";
var r = new RegExp(toBeHighlightedWord, "ig");
str = str.replace(/(>[^<]+<)/g, function(a){
return a.replace(r, "$1<span color='red' class='hl'>$2</span>");
}
此处使用的字符范围来自unicode表的三个块:
请注意,使用新的捕获组会更改替换模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句