我正在使用以下功能来突出显示某个单词,并且它在英语中运行良好
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这个词的装饰和这些小标记是字符
答案 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表的三个块:
请注意,使用新的捕获组会更改替换模式。