gpt4 book ai didi

javascript - 正则表达式抓取 JavaScript

转载 作者:行者123 更新时间:2023-11-28 19:17:09 25 4
gpt4 key购买 nike

我正在使用 casperjs 抓取网页,它与全局 JavaScript 值配合得很好,但现在我陷入了从 jQuery 闭包中获取变量的困境,如下所示:

$(document).ready(function(){
var storeData = {
lon: "-5.91829",
lat: "54.65583",
name: "John Smith"
};
SOMEGLOBALVAR.storeFinder.addStore(storeData);
});

我找不到一种方法来获取经度、纬度和名称!

所以我决定选择脚本标签,然后使用正则表达式从脚本标签中取出代码。这是我使用在线编辑器构建的丑陋的正则表达式:

/var storeData = {\n\t*id.*,\n\t.*(\n\t)*\n\t*.*\n\t*.*\n\t*[a-zA-Z: 0- 9,"]*\n\t*[a-zA-Z: 0-9,"]*\n\t*[a-zA-Z: 0-9,"]*\n\t*\};/g

所以我的问题有两个部分:

  1. 有没有办法访问该函数内的经度、纬度和名称? (我正在抓取,所以我无法更改函数本身)

  2. 如何改进我的正则表达式?

最佳答案

在这里,您可以使用带有捕获组的正则表达式来提取这些值(共有 3 个):

lon: "([^"]*)"[\s\S]*?lat:\s+"([^"]*)"[\s\S]*?name:\s+"([^"]*)".*?

请注意,我使用 [\s\S] 来匹配换行符,因为 JavaScript 中没有 Singleline 选项。

var re = /lon: "([^"]*)"[\s\S]*?lat:\s+"([^"]*)"[\s\S]*?name:\s+"([^"]*)".*?/; 
var str = 'var storeData = {\nlon: "-5.91829",\nlat: "54.65583",\nname: "John Smith"\n};';

if ((m = re.exec(str)) !== null) {
document.getElementById("res").innerHTML = m[1] + "<br>" + m[2] + "<br>" + m[3];
}
<div id="res"/>

关于javascript - 正则表达式抓取 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29610920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com