2017-05-25 101 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(/ = [^; =] +; /)

這個答案和涉及地圖和過濾器的答案。如果值包含分號或等號字符,則不起作用。

在這個額外的替換可以讓你忽略最後一個分號。

最好的方法是編寫一個分析器來計算引號並忽略字符串中的任何內容。