解析选项字符串

4
我该如何解析像这样的字符串:

Text="Andrey\'s Photos; Vacation";Font=Arial;Size=12

转换成JavaScript对象如下:

var options = {
  text: 'Andrey\'s Photos; Vacation',
  font: 'Arial',
  size: 12
}

我的问题是,值可能包含“;”和“=”字符,所以我不能只使用“s.split(';')”。但如果在值字符串中有这些符号,该值应该用单引号或双引号括起来。因此,应该可以解析该字符串。

2
双引号可以用 \" 转义吗? - Matthew Flaschen
1个回答

3
假设答案是否定的:
var s = 'Text="Andrey\'s Photos; Vacation";Font=Arial;Size=12;SingleQuoted=\'The dog said "Foo"\'';
var re = /(.*?)=(?:"(.*?)"|'(.*?)'|([^;]*?))(?:;|$)/g;
var match;

var options = {}
while(match = re.exec(s))
{  
    var string_val = match[2] || match[3] || match[4];
    var num_val = parseFloat(string_val);
    var val = isNaN(num_val) ? string_val : num_val;
    options[match[1].toLowerCase()] = val;
}

编辑:已经更新以允许使用单引号或双引号作为分隔符。但是,您仍然不能转义它们。

编辑2:已更新为使用数字类型(如果适用)。目前它只检查是否可以强制转换为数字,而不是尝试考虑引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接