Hag*_*Aly 7 javascript regex arabic
我正在使用以下功能突出显示某些单词,并且它在英语中工作正常
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;
}
Run Code Online (Sandbox Code Playgroud)
但它不适用于阿拉伯语文本
所以如何修改正则表达式匹配阿拉伯语词汇也与tashkel,其中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>");
}
Run Code Online (Sandbox Code Playgroud)
这里使用的字符范围来自unicode表的三个块:
请注意,使用新的捕获组会更改替换模式.