From 15de2c9233226eb34c9f6eab97ba81cbe858b696 Mon Sep 17 00:00:00 2001 From: kobi Date: Thu, 18 May 2017 17:40:41 +0300 Subject: [PATCH] [youtube]: fix #13123 --- youtube_dl/jsinterp.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/youtube_dl/jsinterp.py b/youtube_dl/jsinterp.py index 24cdec28c..6548044df 100644 --- a/youtube_dl/jsinterp.py +++ b/youtube_dl/jsinterp.py @@ -123,6 +123,12 @@ class JSInterpreter(object): m = re.match( r'(?P%s)\.(?P[^(]+)(?:\(+(?P[^()]*)\))?$' % _NAME_RE, expr) + + if not m: + m = re.match( + r'(?P%s)\[\"(?P[^(]+)\"\](?:\(+(?P[^()]*)\))?$' % _NAME_RE, + expr) + if m: variable = m.group('var') member = m.group('member') @@ -214,13 +220,13 @@ class JSInterpreter(object): obj = {} obj_m = re.search( (r'(?([a-zA-Z$0-9]+\s*:\s*function\(.*?\)\s*\{.*?\}(?:,\s*)?)*)' + + r'\s*(?P\"?([a-zA-Z$0-9]+\"?\s*:\s*function\(.*?\)\s*\{.*?\}(?:,\s*)?)*)' + r'\}\s*;', self.code) fields = obj_m.group('fields') # Currently, it only supports function definitions fields_m = re.finditer( - r'(?P[a-zA-Z$0-9]+)\s*:\s*function' + r'\"?(?P[a-zA-Z$0-9]+)\"?\s*:\s*function' r'\((?P[a-z,]+)\){(?P[^}]+)}', fields) for f in fields_m: