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

时间:2014-06-14 07:06:36

标签: 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;
     }

但它不适用于阿拉伯语文本

所以如何修改正则表达式以匹配阿拉伯语单词也是阿拉伯语单词与tashkel,其中tashkel是在原始字符之间添加的字符 例: “محمد”这没有tashkel “محمد”与tashkel tashkel这个词的装饰和这些小标记是字符

1 个答案:

答案 0 :(得分:5)

在Javascript中,您只能将边界\b用于以下字符:[a-zA-Z0-9_]。由于Javascript不支持此功能,所以后面的断言也没有用处。

解决问题的方法和&#34;模拟&#34;一种单词边界是使用带有要突出显示的字符的否定字符类(因为它是一个否定的字符类,它将匹配不能成为单词一部分的字符。)在左边界的捕获组中。对于正确的,否定的前瞻将非常简单。

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

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