在 JavaScript 中解码字符串后删除转义字符时出现问题

Issue Removing Escape Characters After Decoding String in JavaScript

提问人:Darshan 提问时间:11/8/2023 最后编辑:Darshan 更新时间:11/8/2023 访问量:45

问:

我目前正在研究从 Google 地图 URL 中抓取数据。为了处理我需要的数据,我一直在使用正则表达式和 Node.js 中的替换方法清理 HTML。但是,我遇到了与从 JavaScript 字符串中删除转义字符相关的问题。尽管我努力使用 decodeURIComponent 解码字符串,但这些转义字符仍然存在。我正在寻求帮助,以找到成功删除这些转义字符的解决方案。

这是我的代码

const fs = require("fs");
const unirest = require("unirest");

const getData = async () => {



try {
let url = "https://www.google.com/maps/search/@40.7455096,-74.0083012,14z/coffee?hl=en";

const response = await unirest.get(url).headers({
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36",
});

let data = response.body;

function extractStringBetween(text, start, end) {
    const startIndex = text.indexOf(start);
    if (startIndex === -1) {
      return null; // Starting point not found
    }
  
    const endIndex = text.indexOf(end, startIndex + start.length);
    if (endIndex === -1) {
      return null; // Ending point not found
    }
  
    return text.substring(startIndex + start.length, endIndex);
  }


const startMarker = "window.APP_INITIALIZATION_STATE=";
const endMarker = ";window.APP_FLAGS";

const extractedText = extractStringBetween(data, startMarker, endMarker);

data = extractedText

data = data.toString();
data = data.replace(/\\"/g, '"');
data = data.replace(/\\"/g, '"');
data = data.replace(/\\n/g, "");
data = data.replace(/,null/g, "")
data = data.replace(/null,/g, "")
data = data.replace(/\\\//g,"/")
data = data.replace(/\/\/u003d/g, "=")
data = data.replace(/\/=/g, "=")
data = data.replace(/\/\/u0026/g, "&")
data = data.replace(/\/&/g, "&")
data = data.replace(")]}'", '');
data = data.replace(")]}'", '');
data = data.replace(/]"/g, ']');
data = data.replace(/"\[/g, "[");
data = data.replace(/\[^a-zA-Z0-9]/g, ''); //this thing can remove escape character but  
                                           // is not able to

data = decodeURIComponent(data)

try{
data = JSON.parse(data) // Here I get the error "Unexpected token because of invalid 
}                      //JSON"

catch(e){
 fs.writeFileSync("./google_maps.txt",data)
}   


  } catch (e) {
    console.log(e);
  }
};

getData();

有时此代码有效,但六分之一的请求会因此错误而失败。即使在使用 decodeURIComponent 对其进行解码后,输出中仍然有转义字符。

它们显示在生成的文件中,如下所示:

Il Fiorista Restaurant - Nomad | New York’s first home of the new floral \movement

虽然我希望它没有任何转义字符:

Il Fiorista Restaurant - Nomad | New York’s first home of the new floral movement

任何人都可以提供删除转义字符的解决方案吗?

我包含一个文本文件链接以供参考:

  1. 数据清理后,它仍然返回“意外令牌”错误。
  2. 手动清理数据后,这是我们预期的输出。

https://github.com/Darshan972/GoogleScrapingBlogs/blob/main/1.txt https://github.com/Darshan972/GoogleScrapingBlogs/blob/main/2.txt

JavaScript 正则表达式

评论

1赞 InSync 11/8/2023
你的意思是代替?顺便说一句,使用正则表达式解析 JS 非常微妙。/\\[^a-zA-Z0-9]/g/\[^a-zA-Z0-9]/g
0赞 Darshan 11/8/2023
@InSync我试过了,但没有用。
1赞 InSync 11/8/2023
在这种情况下,请编辑要包含的问题和预期结果。response.body
1赞 InSync 11/8/2023
对我来说,这两个文件看起来都像有效的 JSON。为什么需要更换任何东西?你不能按原样解析它们吗?
1赞 InSync 11/8/2023
然后考虑使用 JSON5。它允许这种“无效”的转义。

答: 暂无答案