bertonzh 最近的时间轴更新
bertonzh

bertonzh

🏢  Alipay
V2EX 第 82696 号会员,加入于 2014-11-20 15:01:46 +08:00
写了一个压缩 PNG/JPEG 的 GUI 工具
  •  1   
    分享创造  •  bertonzh  •  2021-12-03 11:41:22 AM  •  最后回复来自 youthfire
    28
    写了一个浏览器端的 ttyplay
  •  1   
    分享创造  •  bertonzh  •  2016-09-07 10:07:27 AM  •  最后回复来自 gongbaodd
    2
    owl redirector——更好用的 Chrome 请求重定向扩展
    分享创造  •  bertonzh  •  2015-03-25 23:50:29 PM  •  最后回复来自 Luzifer
    23
    bertonzh 最近回复了
    @wxf666 试试这样呢?

    ```
    function parseJson(json) {
      let nums = [];
      return JSON.parse(json.replace(/"(?:\\?.)*?"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g, m =>
       m[0] === '"' ? m : nums.push(/[.eE]/.test(m) || Number.isSafeInteger(+m) ? +m : BigInt(m)) - 1
     ), (key, val) => typeof val === 'number' ? nums[val] : val);
    }
    ```
    @wxf666 原来是把数组序号替换进去了啊,可以可以
    @wxf666 你这个办法可不行,JS 遍历对象 key 的顺序并不是按照字面量 key 顺序来的,所以你无法通过数组按顺序记录整数。
    另外,性能也不一定快,因为你做了三步:分词 + JSON.parse + 遍历替换,而手动解析只需要一趟(分词和生成结果同时处理)。(具体我没测过)


    所以要么是用你最开始的 eval 方式。不过 eval 比 JSON.parse 更慢,因为 eval 处理的是 JS 代码,语法比 JSON 复杂很多倍。
    或者用楼主的实现,即先替换成一个带特殊唯一标志的字符串,然后在 JSON.parse 的第二个回调参数里面做替换,或者在 parse 之后遍历。
    @wxf666 嗯,看上去这个思路是可以的,优先匹配掉字符串,再匹配的数字串就肯定是字符串外面的。
    对转义的处理目前没有发现什么毛病。

    @Jobing 楼主可以借鉴一下。
    其实你这个实现完善一下应该可以处理这个问题(再往前判断一下属性名的右引号)。

    但是别忘了 JSON 里面有数组:

    parse('[12345678901234561111]')

    通过正则不可能完全识别数组中 Int 。
    建议先看看别人是怎么做的:
    https://github.com/sidorares/json-bigint

    你这几十行靠粗糙的正则替换实现的 json bigint 支持,自己在小项目里面对付简单场景可以,就不要发到 github 和 npm 了哈。

    parse('{"x": ": 12345678901234561111"}')

    Uncaught SyntaxError: Expected ',' or '}' after property value in JSON at position 11
    at JSON.parse (<anonymous>)
    at e (<anonymous>:1:242)
    at <anonymous>:1:1
    136 天前
    回复了 magic3584 创建的主题 git 请教一下,是谁把代码合丢了
    以上 #53 有 typo ,3D -> 3B
    136 天前
    回复了 magic3584 创建的主题 git 请教一下,是谁把代码合丢了
    不知道我对这个图的理解对不对:
    1. 3B 是一个 merge ,而且 3B 的 parent commit 之一是 1A ;
    2. 1A 中有正常代码,但是 3B 里面没有了。

    如果我的理解正确,那么毫无疑问,是 3D 这个 merge 进行的时候,产生了冲突,然后提交者瞎搞把代码搞没了。
    至于 4A 完全是无辜的,因为相关的冲突已经被 3D 解决过,到 4A merge 的时候这个地方根本就没有冲突产生。
    tauri
    常见的系统交互(文件操作、唤起选择器之类的)已经封装了 JS API 。不过如果有更复杂的系统交互需求,需要写 rust
    Rust 语法中那些看上去难看的东西,主要是生命周期、引用相关的,和 JS 乱七八糟的历史特性没啥关系。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1433 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:06 · PVG 02:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.