使用一个正则表达式解析复杂字符串

时间:2012-04-10 16:11:41

标签: javascript regex

如何从此字符串中获取

genre:+Drama,Comedy+cast:+Leonardo+DiCaprio,Cmelo+Hotentot+year:+1986-1990

genre: [Drama, Comedy],
cast: [Leonardo DiCaprio, Cmelo Hotentot],
year: [1986-1990]

有一个正则表达式吗?

3 个答案:

答案 0 :(得分:1)

您不会从一开始就将它们放入数组中,但如果订单始终保持不变,则可以对其进行解析。

var str = "genre:+Drama,Comedy+cast:+Leonardo+DiCaprio,Cmelo+Hotentot+year:+1986-1990";
str = str.replace(/\+/g," ");

//Get first groupings
var re = /genre:\s?(.+)\scast:\s?(.+)\syear:\s(.+)/
var parts = str.match(re)

//split to get them into an array
var genre = parts[1].split(",");
var cast = parts[2].split(",");
var years = parts[3];

console.log(genre);

答案 1 :(得分:1)

这可以使用一个正则表达式和replace函数的重载来完成,并将replacer作为第二个参数。但老实说,我必须再使用一个replace来摆脱加号(+) - 我用空格()char替换它们:

var str = 'genre:+Drama,Comedy+cast:+Leonardo+DiCaprio,Cmelo+Hotentot+year:+1986-1990';
str = str.replace(/\+/g, ' ');
var result = str.replace(/(\w+:)(\s?)([\w,\s-]+?)(\s?)(?=\w+:|$)/g, function (m, m1, m2, m3, m4, o) {
    return m1 + ' [' + m3.split(',').join(', ') + ']' + (o + m.length != str.length ? ',' : '') + '\n';
});

您可以在jsfiddle上找到完整示例。

答案 2 :(得分:0)

你不能只使用正则表达式,因为你试图解析(微小的)语法。