2017-01-12 4 views
1

Ich muss eine RegExp obejct, die Wörter aus einem Array, suchen wird und finden nur ganze Wörter übereinstimmen.Finden Sie Wörter aus Array in String, ganze Wörter nur (mit hebräischen Zeichen)

z.B. Ich habe eine Wörter-Array ('יל', 'ידד'), und ich möchte die RegExp finden 'a' oder 'יל' oder 'ידד', aber nicht 'ידדדד'.

Dies ist mein Code:

var text = 'ילד ילדדד יל'; 
 
var matchWords = ['יל','ילד']; 
 
text = text.replace(/\n$/g, '\n\n').replace(new RegExp('\\b(' + matchWords.join('|') + ')\\b','g'), '<mark>$&</mark>'); 
 
console.log(text);

Was ich versucht habe:

ich diesen Code versucht:

new RegExp('(יל|ילד)','g'); 

Es funktioniert gut, aber es finden auch Wörter wie "ידדדדדדדד", ich muss nur t passen er ganze Worte.

Ich habe auch versucht, diesen Code:

new RegExp('\\b(יל|ילד)\\b','g'); 

aber dieser reguläre Ausdruck findet kein Wort!

Wie sollte ich meine RegExp erstellen?

+2

Wie kommt 'neue RegExp ('\\ b (word1 | word2 | word3) \\ b', 'g');' findet keine Übereinstimmung? Bitte geben Sie das Code-Snippet zur Reproduktion an. –

+0

Das ist mein Code: 'text = text.replace (/ \ n $/g, '\ n \ n'). Ersetzen (new RegExp ('\\ b (' + matchWords.join ('|') + ') \\ b ',' g '),' $ & '); ' –

+0

Fügen Sie den Code der Frage hinzu. – ppovoski

Antwort

1

Die Wortgrenze \b ist nicht Unicode bewusst. Verwenden Sie XRegExp eine Unicode-Wortgrenze zu bauen:

var text = 'ילד ילדדד יל'; 
 
var matchWords = ['יל','ילד']; 
 
re = XRegExp('(^|[^_0-9\\pL])(' + matchWords.join('|') + ')(?![_0-9\\pL])','ig'); 
 
text = XRegExp.replace(text.replace(/\n$/g, '\n\n'), re, '$1<mark>$2</mark>'); 
 
console.log(text);
<script src="http://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.min.js"></script>

Hier ist (^|[^_0-9\\pL]) eine Erfassungsgruppe mit ID = 1, die entweder die Zeichenfolge übereinstimmt beginnen oder eine char andere als ein Unicode Buchstaben, ASCII digit oder _ (eine führende Wortgrenze) und (?![_0-9\\pL]) schlägt die Übereinstimmung fehl, wenn das Wort mit _, ASCII-Ziffer oder einem Unicode-Buchstaben gefolgt wird.

+1

Vielen Dank! –

1

//Words to join 
 
var words = ['apes', 'cats', 'bazooka']; 
 
//String to search 
 
var str = 'it\'s good that cats and dogs dont wear bazookas'; 
 
//End at start of line, end of line or whitespace 
 
var end = '(^|$|\\s)'; 
 
//Regular expression string 
 
var regex = end + "(" + words.join('|') + ")" + end; 
 
//Build RegExp 
 
var re = new RegExp(regex, "gi"); 
 
//Log results 
 
console.log(str.match(re));

Oder als Funktion

var findWholeWordInString = (function() { 
 
    //End at start of line, end of line or whitespace 
 
    var end = '(^|$|\\s)'; 
 
    //The actual function 
 
    return function(str, words) { 
 
    //Regular expression string 
 
    var regex = end + "(" + words.join('|') + ")" + end; 
 
    //Build RegExp 
 
    var re = new RegExp(regex, "gi"); 
 
    //Return results 
 
    return str.match(re); 
 
    }; 
 
})(); 
 
//Run test 
 
console.log(findWholeWordInString('it\'s good that cats and dogs dont wear bazookas', ['apes', 'cats', 'bazooka']));

Verwandte Themen