2017-09-28 1 views
5

ich für Unicode (UTF-8, kyrillisch) diesen regulären Ausdruck neu zu schreiben hatte:Mein regulärer Ausdruck Code funktioniert nicht

match: /\b(\w{2,})$/, 

Mit Hilfe dieser regulären Ausdrücke:

(/[\wа-я]+/ig) 

(/[\w\u0430-\u044f]+/ig) 

schrieb ich auf diese Weise:

match: /\b(\wа-яa-z{2,})+/ig$/ 

Aber meine reg.exp Code funktioniert nicht. Bitte hilf mir. Voll Code:

$('.form-control').textcomplete([ 
{ 
words: ["россия","сша","англия","германия","google","git","github","php","microsoft","jquery"], 

match: /(?:^|[^\wа-я])([\wа-я]{2,})$/i, 

search: function (term, callback) 
{ 
    callback($.map(this.words, function (word) {return word.indexOf(term) === 0 ? word : null;})); 
}, 
    index: 1,replace: function (word) {return word + ' ';} 
}]); 
+1

Was ist die Regex-Engine, die Sie verwenden? Bitte behalten Sie nur das relevante Tag und entfernen Sie alle anderen. '\ w' stimmt mit allen Unicode-Buchstaben und -Ziffern standardmäßig in .NET und Python 3 überein. –

+1

Ich benutze diesen Code für Javascript – John

+0

Ok, probiere'/(?:^| [^ \ wa- яё]) ([\ wa- яё] {2,}) $/i' –

Antwort

4

Sie benötigen

$('.form-control').textcomplete([ 
 
{ 
 
    words: ["россия","сша","англия","германия","google","git","github","php","microsoft","jquery"], 
 
    match: /(^|[^\wа-яё])([\wа-яё]{2,})$/i, 
 
    search: function (term, callback) 
 
    { 
 
     callback($.map(this.words, function (word) {return word.indexOf(term) === 0 ? word : null;})); 
 
    }, 
 
    index: 2, // THIS IS A DEFAULT VALUE 
 
    replace: function (word) {return '$1' + word + ' ';} 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.textcomplete/0.2.2/jquery.textcomplete.min.js"></script> 
 
<textarea class="form-control" rows=5 cols=50></textarea>

Das Muster (^|[^\wа-я])([\wа-я]{2,})$ Werke wie folgt zu verwenden:

  • (^|[^\wа-яё]) - Capturing Gruppe 1: Beginn der Zeichenfolge oder irgendein anderes Char ein Wort und russische Buchstaben
  • ([\wа-яё]{2,}) - Capturing Gruppe 2: 2 oder mehr Wort oder russische Buchstaben
  • $ - Ende der Zeichenfolge.

HINWEIS:

  • Wir brauchen beide erfassen Gruppen in der Lage sein, die nicht-Wort char zu halten oder die Zeichenfolge vor dem Spiel beginnen wir
  • Damit die Zeichen ändern müssen, dass kann mit der $1 innerhalb der replace (siehe this source code, die zeigt, dass alle literalen $n Rückreferenzen ersetzt werden durch match[n] ersetzt werden)
  • mit derwiederhergestellt werden So
  • , brauchen wir nicht mehr mit doppelten Leerzeichen am Ende zu ersetzen, verwenden return '$1' + word + ' ';
  • Wir index: 2 verwenden müssen, da dieser Wert als Ausdruck behandelt werden wird
  • Um alle russischen Buchstaben zu entsprechen, müssen Sie ё hinzufügen zu den Zeichenklassen seit dem [а-я] Bereich enthält es nicht
  • Auch der index Wert ist standardmäßig auf 2 festgelegt, so können Sie index: 2 aus dem obigen Code entfernen.
+0

Es funktioniert sehr gut in meiner lokalen Seite, aber im Hosting funktioniert nicht. Hier meine Seite [link] (https://mahorat.org) – John

+0

@John Ich habe die Seite in drei Browsern, IE, FF und Chrome geöffnet, und es funktioniert das gleiche wie in meinem Schnipsel oben. –

+0

Ich habe die Seite in der älteren Version Google Chrome geöffnet. Jetzt habe ich Seite auf Vivaldi geöffnet und es funktioniert. Danke @Wiktor Stribiżew – John

Verwandte Themen