2016-03-20 8 views
0

Ich versuche, Wörter aus einer Zeichenfolge dynamisch mithilfe eines Musters zu erhalten. Das Muster und die Eingabe in etwa so aussehenErhalten Sie Wörter aus einem Zeichenfolge-Muster in Javascript

var pattern = "hello this is %var% using %var%"; 
var input = "hello this is nick using javascript"; 

Jetzt möchte ich in der Lage sein, eine Reihe von Variablen zu haben, wie diese

["nick", "javascript"] 
+3

Was ist, wenn 'pattern'" hallo ist, das ist% var% using% var% "und' input' ist "hallo das ist nick using nick using javascript"? – afuous

+0

Es wird in einer Funktion verwendet, die überprüft, ob es mit dem Muster zuerst übereinstimmt, so dass dies nicht passieren wird. @voidpigeon – nickforall

+0

Mögliches Duplikat von [Wie greifen Sie auf die übereinstimmenden Gruppen in einem regulären JavaScript-Ausdruck zu?] (http://stackoverflow.com/questions/432493/how-do-you-access-the-matched-groups-in- a-javascript-regular-expression) – ahoffner

Antwort

2

Dies sollte es tun:

var pattern = "hello this is %var% using %var%"; 
var input = "hello this is nick using javascript"; 

var re = new RegExp(pattern.replace(/%var%/g, '([a-z]+)')); 
var matches = re.exec(input).slice(1); // <-- ["nick", "javascript"] 

Die Variable re ist eine RegExp, deren Muster ist die pattern Variable mit jeder Instanz von %var% ersetzt durch eine einfangende Gruppe von Kleinbuchstaben Buchstaben (ggf. verlängern).

ist dann das Ergebnis der re Regex auf der input Zeichenfolge mit dem ersten Element entfernt (das wird die vollständige übereinstimmende Zeichenfolge) ausgeführt werden.

+0

Vielen Dank, das hat den Trick für mich! – nickforall

0

var pattern = "hello this is %var% using %var%"; 
 
var input = "hello this is nick using javascript"; 
 
var outputArr = []; 
 

 
pattern.split(" ").forEach(function (e, i){ 
 
    e === "%var%" ? outputArr.push(input.split(" ")[i]) : ""; 
 
});

outputArr ist die gewünschte Anordnung.

+3

Bitte verwenden Sie 'for (var i in patternArr)' nicht, um ein Array zu iterieren. Das ist eine schlechte Übung, da die Iteration auch alle aufzählbaren Eigenschaften des Array-Objekts und nicht nur Array-Elemente enthält. Verwenden Sie '.forEach()', eine traditionelle 'for (var i = 0; i jfriend00

+0

thx @ jfriend00, wusste nicht, dass – John

+0

Ich würde vorschlagen, dass Sie Ihre Antwort ändern, um es zu beheben. Sie verwenden den Link "Bearbeiten" unter Ihrer Antwort. – jfriend00

Verwandte Themen