0
我正在使用類似於ES6的變量格式與語法${varName}
,並在處理它們時,我試圖枚舉指定的所有唯一變量,使用以下代碼:正則表達式剝離類似ES6格式的變量
function enumVars(txt) {
var v, names = [];
var reg = /\$\{\s*[a-zA-Z\$_][a-zA-Z0-9\$_]*\s*}/g;
while (v = reg.exec(txt)) {
var svn = v[0].replace(/???/, ''); // stripped variable name;
if (names.indexOf(svn) === -1) {
names.push(svn);
}
}
return names;
}
我一直無法找出正確的RegExp
從exec
結果剝離變量名。
當我使用v[0]
,它給了我${varName}
字符串,我需要將其剝離逼到varName
,消除導致${
,尾隨}
,以及可能存在的內部{ }
周圍的變量的所有空格。
變量有望跟隨javascript的命名慣例,這意味着:
- 有效的變量以字母開頭,下劃線或「$」符號,後面的字母的任意組合,數字,下劃線或'$';
- 變量前後的空格將被忽略。
總之,我們可能會從exec
返回${ _$abc12_$ }
一個變量,我需要調用replace
一個RegExp,將只返回_$abc12_$
。
感謝大家的幫助!
這似乎工作,謝謝!至於英文,至少,沒有跳過解釋變量可以構成的部分,因爲這確實會影響答案。 – 2015-04-04 03:40:56
根據您的更改,我必須說我必須將'\}'更改爲'}',並且替代'enumVars'不適用於我。首先,它沒有'''關閉'map'調用,然後它發生 - 什麼是uniq? :)除此之外,它看起來非常整齊,我只是釣魚它工作:) – 2015-04-04 03:45:05
我已經做了前面描述的變化,除了'uniq()'部分,它會引發錯誤。請將其改爲工作。 – 2015-04-04 04:50:35