【问题标题】:how to extract tuples string into data structure? [duplicate]如何将元组字符串提取到数据结构中? [复制]
【发布时间】:2015-07-05 17:15:34
【问题描述】:

我是新来的。我正在尝试将以下 元组更改为 javascript 中的多维数组。元组字符串:str:"(4,7,1),(8,9,6),(3,5,7)"。 我可以考虑用for循环来做。我正在寻找足够的方法来做到这一点。一种方法是在 javascript 中使用 RegEx。我不擅长正则表达式。 有人可以帮我吗?提前致谢!

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以自己解析它。这是工作 sn-p 中的一种方法:

    function parseTuple(t) {
        var items = t.replace(/^\(|\)$/g, "").split("),(");
        items.forEach(function(val, index, array) {
           array[index] = val.split(",").map(Number);
        });
        return items;
    }
    
    var data = "(4,7,1),(8,9,6),(3,5,7)";
    var result = parseTuple(data);
    document.write(JSON.stringify(result));

    您也可以使用JSON.parse() 为您进行解析,方法是将元组字符串转换为合法的 JSON,如下所示:

    function parseTuple(t) {
        return JSON.parse("[" + t.replace(/\(/g, "[").replace(/\)/g, "]") + "]");
    }
    
    var t = "(4,7,1),(8,9,6),(3,5,7)";
    var result = parseTuple(t);
    document.write(JSON.stringify(result));

    【讨论】:

    • 使用nums.map(Number)更好吗?
    • @TaoP.R. - 我已经添加了改进。谢谢。
    • 感谢您的回复!我错过了正则表达式。我的功能应该是高效的。所以我不知道使用“map”会增加执行时间。如果我错了,请帮忙。我试图了解如何通过平衡使用的内存和执行时间来提高我的代码效率。
    • @alps07 - 正则表达式只是为了摆脱前导和尾随括号。
    • @jfriend00 - 你认为 JSON 方案会比 map 方案更快吗?哪个更高效?
    【解决方案2】:

    你可以使用 eval。这里,这是你的原型函数tuple。

    String.prototype.tuple = function(){
        return eval("[" + this.replace(/\(/g,"[").replace(/\)/g,"]") + "]")
    }
    

    这是你使用这个原型函数的示例。

    var s = "(4,7,1),(8,9,6),(3,5,7)";
    console.log(s.tuple())
    

    如您所见,它既简单又快速,您可以使用下面的 jsFiddle 进行尝试。 所有你需要使用s.tuple()

    这里是jsFiddle

    为什么我要使用 eval 而不是 JSON.parse?

    如果您确定自己的输入,使用eval() 比使用JSON.parse() 好得多。

    • 部分浏览器仍然不支持JSON.parse()
    • JSON.parse() 也使用 eval(),检查 this
    • eval() 比 JSON.parse() 快得多

    String.prototype.tuple = function(){
        return eval("[" + this.replace(/\(/g,"[").replace(/\)/g,"]") + "]")
    }
    
    var s = "(4,7,1),(8,9,6),(3,5,7)";
    document.write(JSON.stringify(s.tuple()))

    【讨论】:

    • 你使用eval而不是JSON.parse的原因是什么?
    • JSON.parse 也使用 eval()。如果您因为安全而确定您的输入,那么使用 eval() 比 JSON.parse 快得多。
    • @AhmetCanGüven - JSON.parse() 不使用 eval()。它以更安全的方式解析 JSON,不易受到嵌入式代码攻击。这就是使用它而不是 eval() 的主要原因。
    猜你喜欢
    • 2017-03-17
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多