如何从JavaScript文件的函数中提取指定API请求参数?
从JS函数返回对象中提取method与url值
需要从JavaScript文件的所有函数中,提取每个函数返回对象内的method值与url值,输出格式为「请求方法, 接口地址」。之前尝试的Shell脚本未实现method与url的配对,无法得到预期结果,以下是解决方法:
示例输入
function getRepoReviewers(gitHost, repoURL) { return { method: 'GET', headers: "", url: `v1/api/code/${gitHost}/reviewers/${repoURL}` } } function getRepoBranches(gitHost, repoURL) { return { method: 'GET', headers: "", url: `v1/api/code/${gitHost}/branches/${repoURL}` } }
预期输出
GET, v1/api/code/${gitHost}/reviewers/${repoURL} GET, v1/api/code/${gitHost}/branches/${repoURL}
原脚本问题分析
原脚本仅单独提取了v1、v2开头的URL字符串,未关联对应的method值,也未处理模板字符串的反引号格式,导致无法生成「方法, 地址」的配对输出。
解决方案
方法1:使用awk处理(推荐,支持多行上下文配对)
awk可以跟踪同一个返回对象中的method和url,确保两者正确关联:
# 处理单个JS文件 awk ' /method: '\''/ { method = substr($2, 2, length($2)-3) # 提取单引号包裹的method值 } /url: `/ { url = substr($2, 2, length($2)-2) # 提取反引号包裹的url值 print method ", " url } ' your-js-file.js
如果需要遍历目录下所有JS文件并输出到CSV:
for file in "$1"/*.js; do awk ' /method: '\''/ { method = substr($2, 2, length($2)-3) } /url: `/ { url = substr($2, 2, length($2)-2) print method ", " url } ' "$file" >> api_endpoints_bat_api.csv echo "" >> api_endpoints_bat_api.csv # 可选:每个文件后添加空行分隔 done
方法2:使用grep+sed+paste(适用于method与url行严格一一对应)
先分别提取所有method和url值,再通过paste配对:
# 提取所有method值 grep -o "method: '\([^']*\)'" your-js-file.js | sed "s/method: '\([^']*\)'/\1/" > methods.txt # 提取所有url值 grep -o "url: `\([^`]*\)`" your-js-file.js | sed "s/url: `\([^`]*\)`/\1/" > urls.txt # 配对输出 paste -d ", " methods.txt urls.txt
内容的提问来源于stack exchange,提问作者Tushar Likhar
相关产品推荐
相关产品推荐

