具有要数组的数组的字符串
String with arrays to array
我有一个字符串:
str = "['movies', ['The Wind', [7, 'acters', ['Any', 'Roberto']]],['Abc',['acters',['Max', 'Alex', 0.312, false, true]]]]"
正如您所注意到的,str有数字和不带引号的true/false值。
有没有一种简单的方法可以将其转换为正确的数组?
arr = strToArr(str)
arr[1][0][1] // 'Alex'
UPDstr有空元素,如[,,,]或类似于此处的[,],[,[,]。
UPD2.字符串中可以到处都是空元素。它只是一个包含空元素的普通数组。
UPD3。嗯。我可以使用eval(str),之后我可以像使用数组一样使用它。但是,这是唯一简单的方法吗?
var str = ("['movies', ['The Wind', [7, 'acters', ['Any', 'Roberto']]]," +
"['Abc',['acters',['Max', 'Alex', 0.312, false, true]]]]").replace(/'/g, '"');
console.log(JSON.parse(str));
将"替换为"并解析为json字符串。
ps:为了更好的可读性,我把它分成了两行。
pps:如果你有类似[,
、,]
或,,
的东西,用.replace(/'/g, '"').replace(/(['[,])'s*(['],])/g, '$1 "" $2');
替换.replace
部件
ppps:好的,这是你的奇怪情况
var str = "['movies', ['The Wind', [7, 'acters', ['Any', 'Roberto']]]," +
"['Abc',['acters',['Max', 'Alex', 0.312,, false, true,],[,],[,[,],]]]]";
str = fixJson(str.replace(/'/g, '"'));
console.log(JSON.parse(str));
function fixJson(match, m1, m2, m3) {
if (m1 && m2)
match = m1 + '""' + m2 + (m3 ? m3 : '');
return match.replace(/(['[,])'s*(['],])(['s']'[,]+)?/g, fixJson);
}
pps#?:我写了一个逐符号的解析器,但它并不完整:1)它不检查闭包,但你可以计算[
和]
的数量2)。。。可能是别的什么。。。就像它修剪所有引号一样,但可以通过将/^["''s]+|["''s]+$/g
修改为/^'s*'|''s*$/g
来固定。
var str = "['movies', ['The Wind', [7, 'acters', ['Any', 'Roberto']]]," +
"['Abc',['acters',['Max', 'Alex', 0.312,, false, true,],[,],[,[,],]]],]";
var result = parse(str, 0);
console.log(result);
function parse(str, start)
{
var i = start, res = new Array(), buffer = '',
re = /^'s*'|''s*$/g, quotes = false;
while(i < str.length) { // move along the string
var s = str[i];
switch(s) { // check the letter
case "'": // if quote is found, set the flag inside of element
if (buffer.substr(-1) != '''') // check for escaping
quotes = !quotes;
else
buffer = buffer.substring(0, buffer.length - 1); // remove /
buffer += s;
break;
case '[': // opening [
if (!quotes) { // not inside of a string element
ret = parse(str, i + 1); // create subarray recursively
i = ret.pos; // get updated position in the string
buffer = null;
res.push(ret.ret); // push subarray to results
} else buffer += s; // add symbol if inside of a string
break;
case ']': // closing ]
if (!quotes) { // not inside of a string
if (buffer != null) // buffer is not empty
res.push(buffer.replace(re, "")); // push it to subarray
return {ret: res, pos: i}; // return subarray, update position
}
buffer += s; // if inside of a string - add letter
break;
case ',': // comma
if (!quotes) { // not inside of a string
if (buffer != null) // buffer is not empty
res.push(buffer.replace(re, "")); // push it to results
buffer = ''; // clear buffer
break;
}
default: buffer += s; break; // add current letter to buffer
}
i++;
}
return res;
}
如果你把引号从单换成双,双换成单,如下所示:
var str = '["movies", ["The Wind", [7, "acters", ["Any", "Roberto"]]],["Abc",["acters",["Max", "Alex", 0.312, false, true]]]]'
然后您可以使用JSON解析方法(在一些本机实现中为JSON.parse
)
var arr = JSON.parse(str);
console.log(arr[1][1][0]); //=> 7
相关文章:
- 高亮显示与数组字符串一起使用时文本插件中断
- 从数组/字符串中删除所有小数和单个数字
- 使用Javascript regex替换“index”数组字符串
- 如何将复选框中的选中值收集为 javascript 数组/字符串
- 将数组数组字符串转换为 Javascript 数组数组的优雅方法
- 如何将数组字符串转换为数组
- 通过数组字符串访问JavaScript对象中的值
- Javascript数组字符串作为图像键
- Chrome和Firefox正在检索字符,而不是javascript中的数组字符串
- 如何在 JavaScript 函数中从 PHP end 传递数组字符串作为参数
- Jquery 如何检查数组字符串值是否在文本区域中
- 如何转换数组字符串
- JS数组字符串将名称修补到数组(对象)
- 在Javascript中从数组字符串中查找单个或多个值
- 如何将java数组字符串分配给javascript数组字符串
- 如何在javascript中将子数组字符串的数组转换为子数组的数组?
- 如何将字符串中的特殊值放入数组字符串
- 如何在JavaScript中给出RouteUrl中的数组字符串
- 在javascript的for循环中设置数组's字符串元素的长度为一个变量
- 如何从“数组字符串”中获取键值在javascript