LINUX.ORG.RU

PHP Парсинг переменных яваскрипта

 , ,


0

1

Пользовался до поры до времени такой регуляркой которую нагуглил:

preg_match_all('/var\s+(\w+)\s*=\s*(["\']?)(.*?)\2;/i', $data, $matches);

Но если переменная будет выглядеть как:

var x = 'string;string';
или
var x = {a:{aa:'}}}ee;x{ll}'},b:'};'};
То будет беда, т.к. регулярка ищет тупо по точке с запятой. (Мой мозг при написании регулярки уходит в kernel brain panic)

Гуглил парсер, но не то нахожу что нужно. На github тоже не то что нужно нахожу.

Может кто подскажет какую нибудь грамотную PHP либу для парсинга переменных из яваскрипта?

Заранее благодарен

★★

Последнее исправление: ex3me (всего исправлений: 2)

Ответ на: комментарий от Kalashnikov

Если там было бы айпиай где я парсингом занимаюсь, я бы с радостью его использовал.

ex3me ★★
() автор топика

А зачем парсить переменные javascript? Какую задачу это решает?

Axonom
()
Ответ на: комментарий от goingUp

получается да. API обещают запилить уже не сколько лет, иду на крайности ради автоматизации.

ex3me ★★
() автор топика
Ответ на: комментарий от ex3me

Грамотную либу вряд ли найдешь, так как грамотный человек таким заниматься не будет)

preg_match_all('/var\s+(\w+)\s*=\s*(["\']?)(.*)["\']?;\s*$/im', $data, $matches);

должен скушать оба примера. Не проверял, но по идее должно работать). Кстати, это еще простой регексп.

goingUp ★★★★★
()

лексеров javascript как грязи

wxw ★★★★★
()
Ответ на: комментарий от goingUp

Точки с запятой может и не быть, стандарт разрешает.

Конструкции вроде var a, b = "..."; всё сломают судя по всему. Ровно как и десятки других синтаксических случайностей. Регэкспом это не покрыть.

Правильней будет решать это другому: выполнить жс и просто взять переменные или взять значение в другом месте.

Если не подходит, то брось глупую идею писать парсер языка в один регэксп и просто выцепляй конкретно нужныe тебе переменные по строчкам конкретного файла, а-ля

/\t{3}var SecretVariable = "([^"]*)";/

Kalashnikov ★★★
()
Последнее исправление: Kalashnikov (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.