看了js2py的安装过程,该模块依赖pyjsparser
所以就萌发了直接用parser的欲望。
放出代码:
from pyjsparser import PyJsParser
def getJsVar(argJsSt):
'''获取JS字符串中的变量值,获取顶级变量值'''
p=PyJsParser()
r={}
try:
pp = p.parse(argJsSt)
print(pp)
except Exception as e:
return r
for d in pp["body"]:
if d["type"] == "VariableDeclaration":
if d["declarations"][0]["init"] is not None:
r[d["declarations"][0]["id"]["name"]]=d["declarations"][0]["init"]["value"]
return r
getJsVar 参数为JS字符串,返回顶级变量s的字典。
可能存在的问题:
1 argJsSt 必须是正确的JS字符串,如果字符串内容不符合JS规范,则返回{}
2 如果顶级变量重复赋值(其实不符合js规范,比如 var a=1 ; var a=2),则由于字典特性,取后面一个值。
3 由于只取变量申明中的值,所以只有初始值(比如 var a=1 ; a = 2),只会取出a:1 ,var a ;a=1 则不取a。