【问题标题】:extracting argument value from JS function call with cheerio使用cheerio从JS函数调用中提取参数值
【发布时间】:2022-01-26 13:28:08
【问题描述】:

邮递员请求返回 html 页面。在邮递员测试中使用cheerio,我得到了我需要从中提取更具体值的标签,cheerio 代码是:

const $ = cheerio.load(pm.response.text());
postman.setEnvironmentVariable("the_tag", $('body script'));

这给了我:

< script type = "text/javascript" > $(function () {
some_func(arg1, arg2, arg3, arg4);
});
<  / script >

现在,在 some_func 调用中获取 arg3 值的正确 Cheerio 代码是什么?

【问题讨论】:

    标签: postman html-parsing cheerio


    【解决方案1】:

    不确定这可以用 Cheerio 完成。 我会结合使用正则表达式和split

    将从cheerio 获得的sn-p 存储在一个变量中:let snippet = '&lt; script type = "text/javascript" &gt; $(function () {some_func(arg1, arg2, arg3, arg4);});'

    定义一个返回some_func的所有参数列表的正则表达式:let regex = new RegExp('some_func\\((.*?)\\)'),参见https://regex101.com/r/VnXA8J/1

    获取正则表达式的匹配:let match = regex.exec(snippet);

    使用split 获取第三个参数并使用trim 删除空格:let thirdArgument = match[1].split(",")[2].trim()

    将结果记录到控制台:console.log(thirdArgument) // "arg3"

    let snippet = '< script type = "text/javascript" > $(function () {some_func(arg1, arg2, arg3, arg4);});'
    
    let regex = new RegExp('some_func\\((.*?)\\)')
    
    let match = regex.exec(snippet);
    
    let thirdArgument = match[1].split(",")[2].trim()
    
    console.log(thirdArgument) // "arg3"
    

    【讨论】:

    • 谢谢,这很好用!尽管只要有第一行中的字符串常量即可。当我用要捕获的文本 $('body script').text() 替换它时,它不会。我将如何解决这个问题?
    • 我想我明白了,字符串中出现了多个空格,这似乎以某种方式破坏了拆分语句。使用 $('body script').text().replace(/\s\s+/g, ' ') 代替它们,用单个空格替换它们,成功了:)
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多