Регулярное выражение извлекает переменную JavaScript в PHP

У меня большой HTML-файл, содержащий много контента. Я хочу получить переменную JavaScript, названную 'a' например, из всего файла.

Пример: (удалено много фактического содержимого)

 <html> <head> <script> var a = [{'a': 1, 'b': 2}]; </script> </head> <body> .... </body> </html> 

Из вышеизложенного следует:

 [{'a': 1, 'b': 2}] 

 preg_match('#var a = (.*?);\s*$#m', $html, $matches); echo $matches[1]; 

Объяснение:

  • Regex попытается сопоставить любую строку, содержащую var a =
  • Затем он будет соответствовать всем до тех пор, пока не будет ; , любое количество пробелов \s* , то конец строки $
  • Модификатор m будет пытаться согласовать каждую строку независимо, без нее, $ будет просто соответствовать концу строки, которая будет немного бесполезной

Любое количество пробелов существует только там, где у вас есть пробелы после определения, нет другой причины (например, человеческая ошибка). Если вы уверены, что этого не произойдет, вы можете удалить \s* .

Обратите внимание, что это не заменяет полноразмерный парсер. Вам нужно будет внести изменения, если a определено более чем в одной строке, если a определено более одного раза (подумайте о сфере, вы можете иметь var a в глобальной области, затем var a внутри функции) и т. Д.