如何使用Python在文件中搜索JavaScript变量?
我有一个包含许多JaveScript文件的目录。在这里,我想扫描每个文件,并想用字符串替换每个JavaScript变量,比如“str1”、“str2”、“str3”、“strn”等等 我的问题是:如何识别JavaScript变量 疑问: 若我说var之后的关键字是一个变量,那个么在声明变量时并没有强制要求var 若我说keywordbefore=是一个变量,那个么这个文件也包含HTML代码,所以在HTML标记中,属性和它的值之间有一个=符号如何使用Python在文件中搜索JavaScript变量?,javascript,python,Javascript,Python,我有一个包含许多JaveScript文件的目录。在这里,我想扫描每个文件,并想用字符串替换每个JavaScript变量,比如“str1”、“str2”、“str3”、“strn”等等 我的问题是:如何识别JavaScript变量 疑问: 若我说var之后的关键字是一个变量,那个么在声明变量时并没有强制要求var 若我说keywordbefore=是一个变量,那个么这个文件也包含HTML代码,所以在HTML标记中,属性和它的值之间有一个=符号 那么,如何识别必须替换的变量呢?如果您使用诸如phps
那么,如何识别必须替换的变量呢?如果您使用诸如phpstorm之类的IDE,它可以很容易地为您找到变量。我看不出用Python编程有什么用。这看起来像是JavaScript解析器的工作。是一个Python包,允许您解析JavaScript代码并为其构建AST。然后可以在AST中导航以查找变量。或者,如果您正在处理可能语法无效的JavaScript,则可以使用slimit的lexer 使用解析器的示例:
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
或者只使用lexer:
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
我有很多文件。无法打开每个文件并查看。使用phpstorm,您可以执行Ctrl+Shift+F搜索以查找所有出现的文本。Ctrl+Shift+R进行查找替换。我不是一个正则表达式向导,但这对其中一个来说可能是可行的。也许可以建立一个列表来存储从regex=var之前和之后获取的所有关键字,并从此处检查关键字?