我想在javascript中获取定义字符串的变量名称 为此,我写了一个正则表达式
var x = "sdfsfsdf";
((\w.*?)(\s*=\s*)(['"]*)(.+?)(['"]*)\1)
此表达式的问题是当我使用RegExp.$2
时,我应该将变量名称设为x
,因为我们考虑上面的代码。它适用于某些表达式,但如果有像
function(a) {var b = document.createElement("script");}
然后结果为function(a){var b
。
请帮我改变我的正则表达式,以便在两种情况下都有效。
注意:javascript变量也可以在没有var
即x = "sdfsfsf";
答案 0 :(得分:0)
如果你的字符串不会太疯狂,你可以试试这个:
/[a-z_$][a-z0-9$_]*\s*=\s*.*?(;|$)/gi
试验:
> 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");"]
答案 1 :(得分: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
另见this example。
答案 2 :(得分:-1)
试试这个正则表达式:([^\w]?(\w.*?)(\s*=\s*)(['"]*)(.+?)(['"]*)\1)