我正在将字符串转换为对象,但它正在剥离链接, 请修复我的代码,以便它不能剥离url / link。 目前正在剥离这个
url("http://localhost/xyz.jpg")
至url("http
var style = 'background-image:url("http://localhost/xyz.jpg");
font-size: 20px;font-weight: 300;padding: 20px 10px;';
if (typeof style != 'undefined'){
var att = style.slice(0,-1).split(';');
var obj = {};
for (var i = 0; i < att.length; i++) {
var parts = att[i].split(':');
obj[parts[0]] = parts[1].substring(1);
}
console.log( obj);
}
感谢您的帮助。
答案 0 :(得分:2)
您需要确保在split()
之后只获得两个块:
而不是:
var parts = att[i].split(':');
这样做:
var parts = att[i].split(':');
parts = [parts.shift(), parts.join(':')];
示例:
> parts = 'background-image:url("http://localhost/xyz.jpg");'.split(':')
["background-image", "url("http", "//localhost/xyz.jpg");"]
> parts = [parts.shift(), parts.join(':')]
["background-image", "url("http://localhost/xyz.jpg");"]
答案 1 :(得分:1)
您可以替换
var parts = att[i].split(':');
与
对齐var parts = att[i].split(/:(?!\/)/);
仅在:
处分开,后面没有/
(使用否定前瞻)。
答案 2 :(得分:1)
尝试
var style = 'background-image:url("http://localhost/xyz.jpg"); font-size: 20px;font-weight: 300;padding: 20px 10px;';
if (typeof style != 'undefined'){
var att = style.split(';');
var obj = {};
for (var i = 0; i < att.length; i++) {
if(att[i]){
var parts = att[i].match(/^\s?([a-z-]+):(.*)/);
obj[parts[1].replace(/^\s+|\s+$/, '')] = parts[2].replace(/^\s+|\s+$/, '');
}
}
console.log( JSON.stringify(obj));
}
演示:Fiddle