Javascript 正则表达式和单词搜索不匹配带空格的单词

Javascript 正则表达式和单词搜索不匹配带空格的单词,javascript,jquery,html,regex,highlight,Javascript,Jquery,Html,Regex,Highlight,我必须匹配阿拉伯语文本,并用当前脚本突出显示它们,我可以突出显示或将它们包装在一个链接中,仅用于单个单词,如何修改此脚本,使其也可以匹配多个单词 text = text.replace( /([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g, replacer); 完整代码 (function () { // Our keywords. There are lots of ways you can produce // this map,

我必须匹配阿拉伯语文本,并用当前脚本突出显示它们,我可以突出显示或将它们包装在一个链接中,仅用于单个单词,如何修改此脚本,使其也可以匹配多个单词

text = text.replace(
    /([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g,
replacer);
完整代码

(function () {
    // Our keywords. There are lots of ways you can produce
    // this map, here I've just done it literally
    //الولايات المتحدة الأمريكية, الولايات المتحدة, اوباما, وأمريكا, والتفاوض, وإيران, الاتفاق النووي, الخليج العربي, الخليج الفارسي

    var keywords = {
        "الخليج العربي": true,
            "الاتفاق النووي": true,
            "الخليج العربي": true,
            "وإيران": true,
            "والتفاوض": true,
            "وأمريكا": true,
            "اوباما": true,
            "الولايات المتحدة": true,
            "الولايات المتحدة الأمريكية": true
    };

    // Loop through all our paragraphs (okay, so we only have two)
    $("p").each(function () {
        var $this, text;

        // We'll use jQuery on `this` more than once,
        // so grab the wrapper
        $this = $(this);

        // Get the text of the paragraph
        // Note that this strips off HTML tags, a
        // real-world solution might need to loop
        // through the text nodes rather than act
        // on the full text all at once
        text = $this.text();

        // Do the replacements
        // These character classes just use the primary
        // Arabic range of U+0600 to U+06FF, you may
        // need to add others.
        text = text.replace(
            /([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g,
        replacer);

        // Update the paragraph
        $this.html(text);
    });

    // Our replacer. We define it separately rather than
    // inline because we use it more than once      
    function replacer(m, c0, c1) {
        // Is the word in our keywords map?
        if (keywords[c0]) {
            // Yes, wrap it
            c0 = '<a class="red" href="#">' + c0 + '</a>';
        }
        return c0 + c1;
    }
})();
(函数(){
//我们的关键词。你可以用很多方法制作
//这张地图,在这里,我已经完成了
//الولايات المتحدة الأمريكية, الولايات المتحدة, اوباما, وأمريكا, والتفاوض, وإيران, الاتفاق النووي, الخليج العربي, الخليج الفارسي
变量关键字={
“真的吗,
“真的,
“真的吗,
“وإيان”:正确,
“真的”,
“وأميكا”:正确,
“ابااا”:对,
是的,
“真的吗
};
//循环浏览我们的所有段落(好的,我们只有两段)
$(“p”)。每个(功能){
var$this,text;
//我们将不止一次在'this'上使用jQuery,
//所以抓住包装纸
$this=$(this);
//获取段落的文本
//请注意,这会去掉HTML标记,这是一个
//现实世界的解决方案可能需要循环
//通过文本节点而不是行为
//在全文中一下子
text=$this.text();
//做替换
//这些字符类只使用主字符
//阿拉伯语范围为U+0600至U+06FF,您可以
//需要添加其他。
text=text.replace(
/([\u0600-\u06ff]+)([^\u0600-\u06ff]+)?/g,
替代品);
//更新该段
$this.html(文本);
});
//我们的替代者。我们单独定义它,而不是
//内联,因为我们多次使用它
功能替换器(m、c0、c1){
//这个词在我们的关键词地图上吗?
if(关键字[c0]){
//是的,把它包起来
c0='';
}
返回c0+c1;
}
})();
小提琴示例:

实际来源

我只是想匹配关键字,并将它们包装在HTML中,HTML可以是
,但阿拉伯语也会中断,因为其中一位用户建议使用Highlight插件作为解决方案,但正如上周提出的这个问题所述,它会中断

我对我采取的方法还有其他问题

  • 如果阿拉伯语单词被包装在
    中,或者被
    分隔,或者如果我从正则表达式中删除
    \s
    ,最后一个单词有时不匹配,那么它可以正常工作
  • 可能还有其他的情况,它可能会破裂,到目前为止,我已经试图解决一个问题,但后来其他东西破裂了

  • 在这方面,我非常感谢您的帮助,我只想使用任何正常工作的插件来匹配准确的阿拉伯语关键词,到目前为止,我尝试了几个选项,但它们有其他问题之一。您的方法的问题不在于正则表达式。您单独匹配每个单词,然后检查该单词是否为关键词。如果de>关键字
    包含一些与之不匹配的单词

    一个选项是根据
    关键字
    更改正则表达式模式

    例如:

    var keywords = [ "الخليج العربي","الاتفاق النووي","الخليج العربي",
                     "وإيران","والتفاوض","وأمريكا","اوباما",
                     "الولايات المتحدة الأمريكية","الولايات المتحدة"];
    var keywordRegexp = new RegExp(keywords.join("|"), 'g');
    
    然后:

    text = text.replace(keywordRegexp, '<a class="red" href="#">$&</a>');
    

    工作示例:

    我尝试突出显示插件,但问题是它匹配任何组合,我也发布了关于这一点的问题。如果我添加带有

    的关键字,则它会断开,通常与最后一个不匹配word@KnowledgeSeeker-您能否编辑问题以包括所有这些情况?
    function replacer(g0) {
        return '<a class="red" href="#">' + g0 + '</a>';
    }
    text = text.replace(keywordRegexp, replacer);
    
    $("p").highlight(keywords);