2012-04-10 8 views
0

ich die Variablennamen in Javascript zu bekommen, die einen String dafür definieren Ich habe einen regulären Ausdruck schriebregulären Ausdruck für ein Wort passenden

var x = "sdfsfsdf"; 

((\w.*?)(\s*=\s*)(['"]*)(.+?)(['"]*)\1) 

Das Problem mit diesem Ausdruck ist, wenn ich RegExp.$2 Ich benutze sollte den Variablennamen als x erhalten, wenn wir den obigen Code betrachten. Es arbeitet mit einem gewissen Ausdruck in Ordnung, aber wenn es Code wie

function(a) {var b = document.createElement("script");} 

dann ist das Ergebnis function(a){var b ist.

Bitte helfen Sie mir meinen regulären Ausdruck zu ändern, so dass es in beiden Fällen funktioniert.

Hinweis: JavaScript-Variablen können auch ohne var dh x = "sdfsfsf";

+2

Was ist mit 'var test = 'var test =" var test = \ "var test; \" "';" Das ist auch eine gültige Variable. – Blender

+0

Tut mir leid, ich habe Sie nicht bekommen, wenn Sie angeben, um Var im regulären Ausdruck hinzuzufügen, dann ist es nicht notwendig, eine Variable mit Var zu deklarieren, es kann auch einfach deklariert werden in diesem Fall könnten wir solche Variablen verpassen. – user1275375

+1

Ich versuche zu sagen, dass Regex nicht wirklich das Werkzeug ist, um willkürliche JavaScript-Variablenverzögerungen zu analysieren. Kannst du deine Absichten ein wenig erklären? Warum musst du das tun? Vielleicht gibt es einen einfacheren Weg. – Blender

Antwort

-1

diese regex Versuchen deklariert werden: ([^\w]?(\w.*?)(\s*=\s*)(['"]*)(.+?)(['"]*)\1)

+0

es funktioniert nicht, es liefert die gleiche Ausgabe – user1275375

+0

@Steven, Können Sie erklären, was mit der Regex des OPs falsch ist, und warum Sie denken, dass Ihre arbeiten wird, wo seine nicht? Weil, nichts für ungut beabsichtigt, das sieht für mich wie eine wilde Vermutung aus. –

+0

Das [^ \ w] in der Regex bedeutet, dass es ein Zeichen geben sollte, das nicht [a-zA-Z_] ist, so dass es nicht zur Funktion passt (a) {this part –

0

Wenn die Saiten nicht zu verrückt sein, können Sie dies versuchen:

/[a-z_$][a-z0-9$_]*\s*=\s*.*?(;|$)/gi 

Tests:

> var r = /[a-z_$][a-z0-9$_]*\s*=\s*.*?(;|$)/gi; 
    undefined 
> 'var x = "sdfsfsdf";'.match(r); 
    ["x = "sdfsfsdf";"] 
> 'function(a) {var b = document.createElement("script");}'.match(r); 
    ["b = document.createElement("script");"] 
+0

'/ [a-z _ $] [a-z0-9 $ _] + \ s * = \ s *. *?/Gi' etwas kürzer. – row1

+0

Danke, ich werde es bearbeiten. – Blender

+0

Was ist mit anderen Unicode-Zeichen, die nicht in diesen Bereich passen? – RobG

0
/(^|;|{)\s*(var\s+)?(\S+)\s*=\s*['"][^'"]*['"]\s*(}|;|$)/i 

(^|;|{)   at the beginning, after a semicolon or the bracket 
\s*    0-n whitespace characters 
(var\s+)?  could be followed by "var" with at least one whitespace 
(\S+)   at least one none whitespace character 
\s*=\s*   equal sign with possibly surrounded whitespaces 
['"][^'"]*['"] a 'string' 
\s*(}|;|$)  have to end with the bracket or a semicolon or the end of the variable has been reached 

Siehe auch this example.