首先,我尝试在SO上搜索但无法找到解决方案。我有一个字符串
var str = 'a:5:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";i:3;s:1:"4";i:4;s:1:"5";}';
我想把“”中的所有数字作为javascript中的数组。我在其中一个问题上尝试了这个建议。
console.log(str.split(/[""]/));
但输出
["a:5{i:0;s:1:", "1", ";i:1;:", "2", ";i:2;s:1:", "7", ";i:3;s:1:", "4", ";i:4;s:1:", "5", ";}"]
这不完全正确。
实际上,上面的字符串是存储在MemcacheD中的PHP数组,我在Node.JS中检索它,这就是我不能使用json_encode的原因。我不擅长正则表达。所以专家们请展示一些亮点。
上面字符串的结果应该是这样的数组或字符串
str = "1,2,3,4,5";
或类似
的数组array = [1,2,3,4,5];
答案 0 :(得分:3)
str.match(/"\d+"/g).join().replace(/"/g,'')
// "1,2,3,4,5"
答案 1 :(得分:0)
function match_all(str, re) {
var ret = [], v;
while(v = re.exec(str)) {
ret.push(v[1]);
}
return ret;
}
var str = 'a:5:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";i:3;s:1:"4";i:4;s:1:"5";}';
var numbers = match_all(str, /"(\d+)"/g);
console.log(numbers);
//to convert the result to ints
console.log(numbers.map(function(v) { return +v; }));
答案 2 :(得分:0)
所以,这是一个PHP serialized字符串。 unserialize项目中有一个php.js
版本可供javascript使用。
所以使用该功能。
的Javascript
var str = 'a:5:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";i:3;s:1:"4";i:4;s:1:"5";}';
console.log(unserialize(str));
输出
["1", "2", "3", "4", "5"]
上
如果你使用的是nodejs,那么你也可以考虑像php-unserialize