高亮显示两个阿拉伯字符串(Javascript)的匹配词

Coisox

我正在为阿拉伯语搜索引擎,该引擎应以红色突出显示匹配结果。给定2个字符串:

Keyword: بِسْمِ ٱلرحمن ٱلرحيم ملك
Result: بِسْمِ ٱللَّهِ ٱلرَّحْمَٰنِ ٱلرَّحِيمِ

我想在第二个字符串上突出显示匹配词和变音符号。第一张图片是要搜索的关键字,第二张图片是我希望实现的目标:

在此处输入图片说明

在所需的结果图像中,将仅突出显示匹配的单词和“变音符号/单词”。我尝试使用以下代码来实现此目的:

var keyword = removeDhabt('بِسْمِ ٱلرحمن ٱلرحيم ملك').split(' ');
var source = 'بِسْمِ ٱللَّهِ ٱلرَّحْمَٰنِ ٱلرَّحِيمِ'.split(' ');
for(var b=0; b<source.length; b++) {
    for(var c=0; c<keyword.length; c++) {
        if(keyword[c]==removeDhabt(source[b])) source[b] = '<red>'+source[b]+'</red>';
    }
}

$(target).html(source);

function removeDhabt(s) {
    return s.replace(/ِ/g,'').replace(/ُ/g,'').replace(/ٓ/g,'').replace(/ٰ/g,'').replace(/ْ/g,'').replace(/ٌ/g,'').replace(/ٍ/g,'').replace(/ً/g,'').replace(/ّ/g,'').replace(/َ/g,'');
}

结果:

在此处输入图片说明

然后我分割,循环并比较每个字符,但结果是垃圾:

在此处输入图片说明

然后,我在这里找到了零宽度的连接符:HTML中的部分阿拉伯语单词,实施该技术后,最终结果仍然不是100%准确:

在此处输入图片说明

这是我的最终代码,需要您的完善或建议:

var keyword = removeDhabt('بِسْمِ ٱلرحمن ٱلرحيم ملك').split(' ');
var source = 'بِسْمِ ٱللَّهِ ٱلرَّحْمَٰنِ ٱلرَّحِيمِ'.split(' ');
for(var b=0; b<source.length; b++) {
    for(var c=0; c<keyword.length; c++) {
        if(keyword[c]==removeDhabt(source[b])) {
            var newSource = source[b].split('');
            var e = 0;
            for(var d=0; d<keyword[c].length; d++) {
                while(keyword[c][d]!=newSource[e]) e++;
                newSource[e] = '<red>'+newSource[e]+'&zwj;</red>';
            }
            source[b] = newSource.join('');
        }
    }
}

$(target).html(source);

function removeDhabt(s) {
    return s.replace(/ِ/g,'').replace(/ُ/g,'').replace(/ٓ/g,'').replace(/ٰ/g,'').replace(/ْ/g,'').replace(/ٌ/g,'').replace(/ٍ/g,'').replace(/ً/g,'').replace(/ّ/g,'').replace(/َ/g,'');
}
Coisox

我找到了解决问题的方法。我将关键字复制到搜索结果顶部的另一层,并使用CSS对齐它们。这样,我不仅可以突出显示匹配词+变音符号,还可以显示缺少的变音符号:

这是代码:

for(var b=0; b<source.length; b++) {
    for(var c=0; c<keyword.length; c++) {
        if(removeDhabt(keyword[c])==removeDhabt(source[b])) {
            source[b] = '<m0><m1>'+keyword[c]+'</m1>'+source[b]+'</m0>';
        }
    }
}

这是CSS:

m0 {
    color: #3498DB;
}
m0 m1 {
    color: #CC425B;
    position: absolute;
    top: 0;
    right: 0;
}

结果如下:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PIL draw.text()将包含阿拉伯连字的字符串显示为两个单独的字形

在javascript中打印阿拉伯字符串

过滤阿拉伯字符串

长度较短的字符串忽略非空格字符(如阿拉伯音符号),但不切词

在开始中将整数插入阿拉伯字符串

SQL查询OR函数反转阿拉伯字符串

在Java中打印阿拉伯字符串

在C ++中反转阿拉伯字符串

匹配互连的阿拉伯字符

阿拉伯语/波斯语字符串中的JavaScript字符串拆分问题

Flash / AS3高亮显示阿拉伯文字

PHP RegEx匹配阿拉伯语字符串前后一定数量的单词

如何分隔字符串(阿拉伯字符串)

php strstr未检测到阿拉伯字符串中的子字符串

如何确定一个字符串是英语还是阿拉伯语?

ActiveAdmin:如何过滤与两个或多个搜索词匹配的字符串

如何使用JavaScript将字符串中的波斯和阿拉伯数字转换为英语?

如何将字符串中的所有罗马数字替换为阿拉伯语等效词?

根据字符串的位置,阿拉伯字符是否具有不同的Unicode代码点?

将带有阿拉伯字符的字符串转换为日期

如何检查字符串是否包含阿拉伯字符飞镖

如何用C#检测字符串中的阿拉伯或波斯字符?

如何解码包含波斯/阿拉伯字符的字符串?

PHP-网址/字符串包含阿拉伯字符

包含阿拉伯文本时查询字符串问题

将语言更改为阿拉伯语后无法解析时间字符串

在字符串中将阿拉伯数字切换为英语

如何从python中的阿拉伯字符串中删除英文文本?

将阿拉伯字符串日期转换为英文日期