在javascript中获取2个字符之间的子字符串

时间:2014-02-27 23:42:52

标签: javascript php regex arrays serialization

首先,我尝试在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];

3 个答案:

答案 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"] 

jsFiddle

如果你使用的是nodejs,那么你也可以考虑像php-unserialize

这样的模块