- (?:\((?:[\w$()\s]+,)*?\s*(?P<b>[a-z])\s*=\s*(?:
- String\s*\.\s*fromCharCode\s*\(\s*110\s*\)|
- "n+"\[\s*\+?s*[\w$.]+\s*]|
- (?P<b1>(?:[\w$]+\s*\.\s*)+n\b(?:(?!&&).)+\))
- )\s*
- (?(b1)
- &&\s*\(\s*(?P=b)|
- (?:
- ,(?P<c>[a-z])\s*=\s*[a-z]\s*)?
- \.\s*get\s*\(\s*(?(b)(?P=b)|"n{1,2}")(?:\s*\)){2}\s*
- &&\s*\(\s*(?(c)(?P=c)|(?P=b))
- )
- )\s*=\s*
- (?P<nfunc>[a-zA-Z_$][\w$]*)(?:\s*\[(?P<idx>\d+)\])?\s*\(\s*[\w$]+\s*\)
+ \((?:[\w$()\s]+,)*?\s* # (
+ (?P<b>[a-z])\s*=\s* # b=
+ (?:
+ (?: # expect ,c=a.get(b) (etc)
+ String\s*\.\s*fromCharCode\s*\(\s*110\s*\)|
+ "n+"\[\s*\+?s*[\w$.]+\s*]
+ )\s*(?:,[\w$()\s]+(?=,))*|
+ (?P<old>[\w$]+) # a (old[er])
+ )\s*
+ (?(old)
+ # b.get("n")
+ (?:\.\s*[\w$]+\s*|\[\s*[\w$]+\s*]\s*)*?
+ (?:\.\s*n|\[\s*"n"\s*]|\.\s*get\s*\(\s*"n"\s*\))
+ | # ,c=a.get(b)
+ ,\s*(?P<c>[a-z])\s*=\s*[a-z]\s*
+ (?:\.\s*[\w$]+\s*|\[\s*[\w$]+\s*]\s*)*?
+ (?:\[\s*(?P=b)\s*]|\.\s*get\s*\(\s*(?P=b)\s*\))
+ )
+ # interstitial junk
+ \s*(?:\|\|\s*null\s*)?(?:\)\s*)?&&\s*(?:\(\s*)?
+ (?(c)(?P=c)|(?P=b))\s*=\s* # [c|b]=
+ # nfunc|nfunc[idx]
+ (?P<nfunc>[a-zA-Z_$][\w$]*)(?:\s*\[(?P<idx>\d+)\])?\s*\(\s*[\w$]+\s*\)