Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python在文件中搜索JavaScript变量?_Javascript_Python - Fatal编程技术网

如何使用Python在文件中搜索JavaScript变量?

如何使用Python在文件中搜索JavaScript变量?,javascript,python,Javascript,Python,我有一个包含许多JaveScript文件的目录。在这里,我想扫描每个文件,并想用字符串替换每个JavaScript变量,比如“str1”、“str2”、“str3”、“strn”等等 我的问题是:如何识别JavaScript变量 疑问: 若我说var之后的关键字是一个变量,那个么在声明变量时并没有强制要求var 若我说keywordbefore=是一个变量,那个么这个文件也包含HTML代码,所以在HTML标记中,属性和它的值之间有一个=符号 那么,如何识别必须替换的变量呢?如果您使用诸如phps

我有一个包含许多JaveScript文件的目录。在这里,我想扫描每个文件,并想用字符串替换每个JavaScript变量,比如“str1”、“str2”、“str3”、“strn”等等

我的问题是:如何识别JavaScript变量

疑问:

若我说var之后的关键字是一个变量,那个么在声明变量时并没有强制要求var

若我说keywordbefore=是一个变量,那个么这个文件也包含HTML代码,所以在HTML标记中,属性和它的值之间有一个=符号


那么,如何识别必须替换的变量呢?

如果您使用诸如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之前和之后获取的所有关键字,并从此处检查关键字?