как сопоставить арабское слово с «ташкем»?

Я использую следующую функцию, чтобы выделить определенное слово, и она отлично работает на английском языке.

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;
     }

но доза не для арабского текста

как изменить регулярное выражение для соответствия арабских слов и арабских слов ташкелю, где ташкель - это символы, добавленные между исходными символами пример: "محمد" это без ташкеля "مُحَمَّدُ" с ташкелем ташкель - украшение слова и эти маленькие отметины - символы

7 голосов | спросил Hager Aly 14 J0000006Europe/Moscow 2014, 11:06:36

1 ответ


0

В Javascript вы можете использовать границу слова \b только с этими символами: [a-zA-Z0-9_]. Утверждение с задним взглядом не может быть здесь полезным, так как эта функция не поддерживается Javascript.

Чтобы решить проблему и «эмулировать» своего рода границу слова, нужно использовать отрицательный символьный класс с символами, которые вы хотите выделить (так как это отрицательный символьный класс, он будет соответствовать символам, которые могут не быть частью слова.) в группе захвата для левой границы. Справа отрицательный взгляд будет намного проще.

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>");
}

Используемые здесь диапазоны символов взяты из трех блоков таблицы Юникод:

  • 0600-06FF (арабский)
  • FB50-FDFF (арабские формы представления-A)
  • FE70-FEFF (арабские формы представления-B) li>

Обратите внимание, что использование новой группы захвата изменяет шаблон замены.

ответил Casimir et Hippolyte 14 J0000006Europe/Moscow 2014, 11:47:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132