скажем, у меня есть следующая строка:
let code = `
var x = 4;
var y=9,
w=8
var z=8080
other()
x=12
`
Как мне написать регулярное выражение, которое получает все объявления переменных? В этом случае я хочу вернуть все операторы, а не выражения, поэтому исключите части other()
и x=12
. Пока у меня есть
let results = `
var x = 4;
var y=9,
w=8
var z=8080
other()
x=12
`.match(/(var)(.*?)(;|,|\n)/g);
console.log(results);
Но я не мог понять, как включить также часть w = 8, поскольку это также оператор объявления, исключая выражения. Я попытался .match(/(var|\n)(.*?)(;|,|\n)/g)
, но это также возвращает х = 12, что я не хочу. Мне также нужно возвращать все блоки операторов, даже если перед ним стоит запятая (либо в предыдущей строке, либо в предыдущем символе, все, что обычно допускает объявление переменной).
Любая идея, как это сделать с помощью регулярных выражений?
РЕДАКТИРОВАТЬ:
с помощью uglify js Я могу сделать следующее (что я и хочу получить в результате):
let strin = `
var x = 4;
var y=9,
w=8,
kk = {
ok:1234
},
p,
a = undefined
var z=8080
other()
x=12
`
let results = UglifyJS.parse(strin).body.filter(x=>x.__proto__.TYPE == "Var")
.map(x=>
x.definitions.map(y=>({
name:y.name.name,
value:y.value ? findInPos(y.value.start, y.value.end,strin) : undefined
})),
).flat()
function findInPos(start, end,str) {
return str.substring(
start.pos,
end.endpos
);
}
<script type="text/javascript" src="https://yaakovyitzchak.github.io/coby/uglify.js">
</script>
Но кажется немного излишним просто извлечь значение string каждой переменной? (Мне не нужно оценивать его, просто получите строковое значение, например, так)