我正在尝试使用Javascript解析QML文件,并从中创建一个JSON。
我遇到了一个我无法解决的问题。
我正在尝试替换"
之间尚未存在的文件的每个字符串,并将其置于双"
之间。
所以,如果我有一些像
Layout.fillHeight: true
height: 200
color: "transparent"
应该成为
"Layout.fillHeight": "true"
"height": 200"
"color": "transparent"
这是我写的正则表达式,非常悲惨:
/((\S\.\S)|\w+?)(?![^"]*\")/g
(\S.\S)|w+? take every string (considering also words with . between them
两个问题:
"
之间的任何字符串,则不会考虑该行的任何字词。replace()
我无法替换字符串,因为$1
或$2
不包含我要替换的确切字符串。我对Regex不太好,所以如果你们能帮助我,我们将不胜感激。
答案 0 :(得分:0)
这样的东西?
删除所有引号,重新插入每行的开头和结尾,然后继续用冒号替换冒号和空格
let string = `Layout.fillHeight: true
height: 200
color: "transparent"`
console.log(string.replace(/\"/g, "").replace(/^|$/gm, "\"").replace(/\:\ /gm, "\": \""))
作为替代方案,如果它们采用数组格式开头:
function quotify(string) {
let regex = /^\s*"?(.*?)"?:\s*"?(.*?)"?$/,
matches = regex.exec(string);
return `"${matches[1]}": "${matches[2]}"`;
}
let strings = ['Layout.fillHeight: true',
'height: 200',
'color: "transparent"'
],
quotedStrings = [];
strings.forEach((string) => {
quotedStrings.push(quotify(string))
})
let jsonString = JSON.parse(`{${quotedStrings}}`);
console.log(jsonString)
答案 1 :(得分:0)
这是一个使用两个替换的Notepad ++解决方案。如有必要,首先双键引用密钥:
<强>查找强>
^([^":]+):
<强>替换强>
"$1"
然后在必要时再次引用这些值:
<强>查找强>
:\s+([^"]+)$
<强>替换强>
"$1"
答案 2 :(得分:0)
这是一个更复杂的解决方案,仅引用尚未引用的字符串。
var str = `Layout.fillHeight: true
height: 200
color: "transparent"`;
var result = str.split(/\n/).map((v) => {
return v.split(/\s*\:\s*/).map((vv) => {
if(!isNaN(vv) || vv == "true" || vv == "false" || (vv[0] == '"' && vv[vv.length - 1] == '"')){
return vv;
}
return `"${vv}"`;
}).join(":");
}).join(",");
console.log(JSON.parse(`{${result}}`));
&#13;
我可能会让事情变得更加复杂,而且在处理我无法考虑的构造时很可能会失败。
答案 3 :(得分:0)
我试过REGEX @Tushar提供:
(\S+)\s*:\s*(\S+)
这是我正在寻找的那个。感谢您的贡献。