JSFiddle - React, Tailwind, and code Playground

HTML

<div id="article">
    <p>keywords</p>
    <p>الولايات المتحدة الأمريكية, الولايات المتحدة, اوباما, وأمريكا, والتفاوض, وإيران, الاتفاق النووي, الخليج العربي, الخليج الفارسي</p>
    <p>ربما يصعب تصديق الأمر الآن، لكنني ما زلت أذكر كيف كنّا نعاني الأمرّين للعثور على مياه نظيفة، وكيف كان نظامنا الغذائي يقتصر على السمك والبلح وحليب الناقة. وأنا ممتنّ على وجه الخصوص لمؤسّسَي دولتنا، الشيخ زايد بن سلطان آل نهيان والشيخ راشد بن سعيد آل مكتوم رحمة الله عليهما، اللذين كانت قيادتهما ورؤيتهما الاستثنائية الثابتة وتصميمهما على النجاح، القوّة الدافعة وراء التحوّل الذي شهدته الإمارات. لقد وضعا معا خطة للتفوّق والامتياز يلتزم بها خلفاؤهما بكل أمانة وتفان.</P>
    <P>وخير دليل على ذلك هو أن الإمارات هي من البلدان القليلة جدا في العالم التي تشهد نموا اقتصاديا بعد إنهيار الإقتصاد العالمي الذي بدأ في العام 2008 والذي لا زال يرخي بظلاله على الولايات المتحدة وأوروبا وأماكن أخرى. قبل بضع سنوات، توقع معلقون غربيون، بلهجة منتشية، أن تبتلع الرمال دبي. ربما كان ذلك مدعاة للضحك والسخرية بالنسبة إليهم، لكن حتى الأكثر جموحاً بينهم لا بد له من الإقرار بأننا نحن من نضحك الآن الضحكة الأخيرة.</P>
    <P>العام الماضي، سُررت كثيراً لقيام صاحب السمو الشيخ خليفة بن زايد آل نهيان، رئيس دولة الإمارات وحاكم أبو ظبي، بإطلاق "مبادرة أبشر’’ التي تهدف إلى تشجيع الإماراتيين على العمل في القطاع الخاص حيث يستحوذ الوافدون على الحصّة الأكبر من الوظائف. وأكثر من ذلك، حصلت هذه المبادرة على الدعم الشخصي من صاحب السمو الشيخ محمد بن راشد آل مكتوم، نائب رئيس الدولة ورئيس وزراء دولة الإمارات وحاكم دبي، فقد أعلن العام 2013 "عام التوطين’’ ، مع التأكيد على الهدف الأساسي لـ"مبادرة أبشر" المتمثّل في تأمين مستوى معيشي لائق للمواطنين الإماراتيين.</P>
    <P>تشير الإحصاءات الحالية إلى أن عدد الإماراتيين الذين يعملون في القطاع الخاص يبلغ حوالي 22 ألفاً فقط في هذا القطاع الذي يوظّف أكثر من أربعة ملايين شخص. وفي رأيي، كما في رأي عدد كبير من الإماراتيين، هذا التفاوت يدعو إلى القلق؛ ويؤكّد هذا الواقع أيضاً المشاعر التي عبّر عنها رئيس إدارة تنمية القوى العاملة في دبي الذي قال مؤخراً "نعيش في عالم تسوده العولمة، والجميع يتنافسون على...

CSS

.red {
    color:red!important;
    font-size:18px
}
p {
    margin:10px;
    font-size:18px
}
#article {
    direction:rtl;
}

JavaScript

(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,
            "دبي": true,
            "لكنني": true,
            "الإمارات": true,
        "كيف كنّا":true
    };

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

        // 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();
        text2 = $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\w]+)([^\u0600-\u06ff]+)(?=\s|$)/g,
        replacer);

        text2 = text2.replace(
            /([\u0600-\u06ff\s]+)([^\u0600-\u06ff]+)(?=\s|$)/g,
        replacer);

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

    // 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...