2014-06-14 15 views
7

sto usando la seguente funzione per evidenziare certa parola e funziona benissimo in inglesecome abbinare la parola araba con "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; 
    } 

ma dose non per il testo arabo

così come modificare l'espressione regolare per abbinare parole arabe anche parole arabe con tashkel, dove tashkel è un personaggio aggiunto tra i personaggi originali esempio: "محمد" questo senza tashkel "محمد" con tashkel la tashkel la decorazione della parola e questi piccoli marchi sono personaggi

+1

È possibile considerare http://xregexp.com//https://github.com/slevithan/xregexp per un motore regex JS avanzato in grado di gestire Unicode, tra molte altre cose. – Tomalak

risposta

5

In Javascript, è possibile utilizzare la parola limite \b solo con questi caratteri: [a-zA-Z0-9_]. Un'asserzione dietro le quinte non può essere utile anche qui poiché questa funzione non è supportata da Javascript.

Il modo per risolvere il problema e "emulare" una sorta di limite di parola è quella di utilizzare una classe di caratteri negata con i personaggi che si desidera evidenziare (in quanto si tratta di una classe di caratteri negata, essa corrisponderà caratteri che puo' t essere parte della parola.) in un gruppo di cattura per il limite sinistro. Per la destra un lookahead negativo sarà molto semplice.

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

intervalli di caratteri che vengono utilizzati qui provengono da tre blocchi della tabella unicode:

Si noti che l'uso di un nuovo gruppo di cattura cambia il modello di sostituzione.

+0

C'è qualche esempio di lavoro per la funzione sopra o come implementare questa funzione per sostituire le parole arabe racchiuse nel lato un tag div – Learning

+0

come posso farlo funzionare con il seguente esempio http://jsfiddle.net/u3k01bfw/13/, in il mio caso non corrisponde a tutte le parole chiave – Learning

Problemi correlati