2016-03-25 8 views
1

Ich möchte einen einfachen Internpreter in JavaScript/Node schreiben. Ich habe ein Hindernis, wenn es darum geht Token zu generieren.Erhalte Tokens von einem JavaScript-Code

var code = 'if (a > 2 && b<4) c = 10;'; 

code.match(/\W+/g) 
// [" (", " > ", " && ", "<", ") ", ";"] 

code.match(/\w+/g) 
// ["if", "a", "2", "b", "4", "elo"] 

Wie gezeigt, W+ lässt mich Sonderzeichen erhalten und w+ lässt mich Worte bekommen. Ich frage mich, wie diejenigen, die in einer Reihe, so etwas wie unten zu bekommen:

// ["if", "(", "a", ">", "2", "&&", "b", "<", "4", ")", "c", "=", "10", ";"] 
+1

'\ W +' ist extrem naiv, Rücksicht r '(! a + -1)', '/ \ w + | \ W + /' erzeugt '(! , a, + -, 1,) 'während die korrekte Tokenisierung ist' (,!, a, +, -1,) ' – georg

+0

Sie können JS nicht mit regexp analysieren. Es hat nicht die erforderliche Parsing-Power. –

+0

@torazaburo könnten Sie etwas besseres vorschlagen? –

Antwort

1

Wie gezeigt, W + läßt mich Sonderzeichen erhalten und w + läßt mich Worte bekommen. Ich frage mich, wie diejenigen, die in einer Reihe zu bekommen, so etwas wie unten:

einfach versuchen, diese

code.match(/\w+|\W+/g) 

gibt Ausgang als

["if", " (", "a", " > ", "2", " && ", "b", "<", "4", ") ", "c", " = ", "10", ";"] 

Und dies wird die Token als auch

trimmen
var tokens = code.match(/\w+|\W+/g).map(function(value){return value.trim()}); 
+0

Das funktioniert gut, danke. –

+0

Aber wenn 'code' wie' if (! A) 'ist, bekomme ich' (! 'Anstelle von standalone' ('' '' '' '). –

+0

@DamianCzapiewski können Sie die Zeichenfolge teilen, die Sie versucht haben? – gurvinder372