如何将阿拉伯语单词与"tashkel"相匹配?

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字的装饰和这些小标记是人物

Cas*_*yte 5

在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表的三个块:

请注意,使用新的捕获组会更改替换模式.