在不使用 eval() 的情况下评估字符串

我正在创建一个“通用”网络抓取工具,它将抓取任何具有条目列表的页面。我想从配置中驱动它应该提取的标签。


具有以下配置的示例:


    name : "price",

    valueJQueryExpression : ".mt9 > .mt7.b"

},

...我正在解析以下方式:


const $ = require('cheerio');

let jquery = getQuery("price");

let keys = $(jquery);

但是,我有更棘手的解析器要处理,例如。那个:


let location = $('.mt9 > .b', html).not('.mt5').not('.mt7').text().trim()

在这种情况下,我认为使用 aneval()并在配置中传递完整的表达式。但是,由于安全问题,不建议这样做。


你有什么关于以不同方式处理这个问题的建议吗?


慕盖茨4494581
浏览 165回答 2
2回答

狐的传说

您应该可以在这里使用:not伪类。请尝试以下操作:$('.mt9 > .b:not(.mt5):not(.mt7)', html).text().trim()它类似于 jQuery,其中指定的选择器:not()将用于从匹配项中排除元素。您可以在下面看到它的实际效果:.mt9 > .b:not(.mt5):not(.mt7) {&nbsp; color: red;}<div class="mt9">&nbsp; <div class="b">This should be red</div>&nbsp; <div class="b mt7">This should not be red</div>&nbsp; <div class="b mt5">This should not be red</div></div>

慕姐8265434

var command = 'console.log("Hello")';var s = document.createElement("script");s.textContent = command;document.head.appendChild(s);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript