fetch读取文件内容并查找文件内容后替换为对应的字符串

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
       
        const fileUrl = '文件地址';
        const searchStr = 'v';
        let modifiedStr = ''; // 用于存储已修改的字符串

        fetch(fileUrl)
            .then(response => {
                // response.body 是响应对象的主体部分,也就是要读取的内容。然后,我们使用 getReader() 方法从响应主体中获取一个阅读器对象,该对象具有读取数据的方法。
                const reader = response.body.getReader();
                //这部分代码创建了一个可读流(ReadableStream),并定义了该可读流的 start() 方法。
                return new ReadableStream({
                    start(controller) {
                        function processResult(result) {
                            //检查当前结果是否已经读取完毕(result.done)。如果是,我们使用 controller.close() 关闭控制器
                            if (result.done) {
                                controller.close();
                                console.log("文件读取完成");
                                console.log('修改后的内容:', modifiedStr);
                                return;
                            }
                            // 使用 TextDecoder().decode(result.value) 将二进制数据解码为字符串,并保存在 str 变量中。
                            const str = new TextDecoder().decode(result.value);

                            if (str.includes(searchStr)) {
                                const modifiedChunk = str.replace(new RegExp(`(^${searchStr})`, 'gm'), `$1哈哈`); // 给匹配字符串添加 "哈哈"
                                modifiedStr += modifiedChunk; // 将修改后的字符串拼接到最终的字符串中
                                console.log("文件中存在以 'v' 开头的字符串,添加了 '哈哈'");
                            } else {
                                modifiedStr += str; // 将原始字符串拼接到最终的字符串中
                            }

                            return reader.read().then(processResult);
                        }
                        //reader.read().then(processResult) 递归地读取下一个结果,继续执行 processResult(result) 函数,直到所有结果都被处理完毕。
                        return reader.read().then(processResult);
                    }
                });
            })
            .catch(error => {
                console.error('文件读取错误:', error);
            });
    </script>
</body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值