我有许多JaveScript文件的目录。在这里,我想扫描每个文件,并希望用'str1'
,'str2'
,'str3'
,...,'strn'
等字符串替换每个JavaScript变量。
我的问题是:如何识别JavaScript变量?
疑惑:
如果我说var
之后的关键字是变量,那么在声明变量时没有强制var
如果我说=
之前的关键字是变量,但是文件也包含HTML代码,因此在HTML标记内部属性与其值之间会有=
符号。
那么如何识别我必须替换的变量?
答案 0 :(得分:2)
这看起来像是JavaScript解析器的工作。 slimit是一个Python包,允许您解析JavaScript代码并为其构建AST。然后你可以导航AST寻找变量。或者,如果您正在处理可能在语法上无效的JavaScript,则可以使用slimit的词法分析器。
使用解析器的示例:
from slimit.parser import Parser
from slimit.visitors import nodevisitor
from slimit import ast
js = '''
var x = 100;
var y = 200;
s = 'This is a string';
for (var i=0; i<10; i++) {
x--;
y = y * 2;
}
'''
identifiers = set()
tree = Parser().parse(js)
for node in nodevisitor.visit(tree):
if isinstance(node, ast.Identifier):
identifiers.add(node.value)
>>> print "Found identifiers: {}".format(', '.join(identifiers))
Found identifiers: y, x, s, i
或者仅使用词法分析器:
from slimit.lexer import Lexer
js = '''
var x = 100;
var y = 200;
s = 'This is a string';
while (var i=0; i<10; i++) { // invalid while statement
x--;
y = y * 2;
}
'''
identifiers = set()
lexer = Lexer()
lexer.input(js)
for token in lexer:
if token.type == 'ID':
identifiers.add(token.value)
>>> print "Found identifiers: {}".format(', '.join(identifiers))
Found identifiers: y, x, s, i
答案 1 :(得分:-3)
如果你使用像phpstorm这样的IDE,它可以很容易地为你找到变量。我没有看到用Python编程来实现这一目的。