2014-06-14 15 views
7

używam następującą funkcję aby wyróżnić pewne słowa i działa dobrze w języku angielskimjak dopasować arabskie słowo do "tashkel"?

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

ale nie dawki dla arabskiego tekstu

tak jak zmodyfikować regex pasujące słowa arabskie także słowa arabskie z tashkel, gdzie tashkel jEST znaków dodawany między oryginalnych znaków przykład: „محمد” to bez tashkel „محمد” z tashkel tashkel dekoracji słowa i te małe znaki są znakami

+1

Możesz rozważyć http://xregexp.com//https://github.com/slevithan/xregexp dla zaawansowanego silnika regex JS, który może obsługiwać Unicode i wiele innych rzeczy. – Tomalak

Odpowiedz

5

W języku Javascript można używać granicy słowa \b tylko z tymi znakami: [a-zA-Z0-9_]. Twierdzenie lookbehind też nie może być użyteczne, ponieważ ta funkcja nie jest obsługiwana przez Javascript.

Sposobem na rozwiązanie problemu i "emulowanie" pewnego rodzaju granicy wyrazów jest użycie zanegowanej klasy znaków ze znakami, które chcesz podświetlić (ponieważ jest to negowana klasa znaków, będzie pasować do znaków, które mogą ' • być częścią tego słowa.) w grupie przechwytującej dla lewej granicy. Z prawej strony ujemny wynik z wyprzedzeniem będzie bardzo prosty.

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

zakresy znaków, które są używane tutaj pochodzą z trzech bloków tabeli Unicode:

Należy pamiętać, że użycie nowej grupy przechwytującej zmienia zamienny wzorek.

+0

Czy jest jakiś działający przykład dla powyższej funkcji lub jak zaimplementować tę funkcję, aby zastąpić słowami arabskimi owiniętymi w bok znacznik div – Learning

+0

jak mogę to zrobić z następującym przykładem http://jsfiddle.net/u3k01bfw/13/, w mój przypadek nie pasuje do wszystkich słów kluczowych – Learning