2017-05-25 85 views
-3
string = 'a="1";b="5";d="4";'; 

我想获取字符串中的所有变量。我正在做一个JavaScript验证,将取我定的变量内的所有变量..从字符串中获取所有变量名称javascript

输出应该

output = ["a","b","d"]; 
+1

变量总是会出现在'='之前吗?有时会有空白吗?如果你对识别任意JavaScript代码中的所有变量感兴趣,你需要一个解析器,比如[esprima](http://esprima.org/)。从他们的例子中,'esprima.tokenize'将识别符合您需要的'Identifier'类型的标记。 ('esprima.tokenize(myStr).filter(v => v.type ==“Identifier”)。map(v => value)') – apsillers

+0

“*我在做一个javascript验证器*” - 为什么你要重新发明轮子? JS语法中已经有很多解析器(和构建它们的linters)。 – Bergi

+0

你是否尝试过任何东西? – epascarello

回答

1

尝试string.split(';').map(exp => exp.split('=')[0]).filter(x => x)

0

var string = 'a="1";b="5";d="4";'; 
 
var regexp = /(\w+)=".*?";/g; 
 
var result = []; 
 
var match; 
 
while (match = regexp.exec(string)) { 
 
    result.push(match[1]); 
 
} 
 
console.log(result);

您可以使用正则表达式匹配:

0

string.replace(/ = [^ =] * $ /,“”)。split(/ = [^; =] +; /)

这个答案和涉及地图和过滤器的答案。如果值包含分号或等号字符,则不起作用。

在这个额外的替换可以让你忽略最后一个分号。

最好的方法是编写一个分析器来计算引号并忽略字符串中的任何内容。