_NAME_RE = r'[a-zA-Z_$][a-zA-Z_$0-9]*'
_MATCHING_PARENS = dict(zip('({[', ')}]'))
+_QUOTES = '\'"'
class JS_Break(ExtractorError):
return
counters = {k: 0 for k in _MATCHING_PARENS.values()}
start, splits, pos, delim_len = 0, 0, 0, len(delim) - 1
+ in_quote, escaping = None, False
for idx, char in enumerate(expr):
if char in _MATCHING_PARENS:
counters[_MATCHING_PARENS[char]] += 1
elif char in counters:
counters[char] -= 1
- if char != delim[pos] or any(counters.values()):
+ elif not escaping and char in _QUOTES and in_quote in (char, None):
+ in_quote = None if in_quote else char
+ escaping = not escaping and in_quote and char == '\\'
+
+ if char != delim[pos] or any(counters.values()) or in_quote:
pos = 0
continue
elif pos != delim_len: