【发布时间】:2015-07-05 17:15:34
【问题描述】:
我是新来的。我正在尝试将以下 元组更改为 javascript 中的多维数组。元组字符串:str:"(4,7,1),(8,9,6),(3,5,7)"。
我可以考虑用for循环来做。我正在寻找足够的方法来做到这一点。一种方法是在 javascript 中使用 RegEx。我不擅长正则表达式。
有人可以帮我吗?提前致谢!
【问题讨论】:
标签: javascript regex
我是新来的。我正在尝试将以下 元组更改为 javascript 中的多维数组。元组字符串:str:"(4,7,1),(8,9,6),(3,5,7)"。
我可以考虑用for循环来做。我正在寻找足够的方法来做到这一点。一种方法是在 javascript 中使用 RegEx。我不擅长正则表达式。
有人可以帮我吗?提前致谢!
【问题讨论】:
标签: javascript regex
您可以自己解析它。这是工作 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)更好吗?
你可以使用 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()。它以更安全的方式解析 JSON,不易受到嵌入式代码攻击。这就是使用它而不是 eval() 的主要原因。