[英]How to color only JSON keys via regex?
在 javascript 中,我想通过正则表达式捕获我所有的 json 键。 让我们假设 json 输出与新行中的每个键值对。 例如
{
"foo": "bar",
"age": 23,
}
换句话说,字符串的每个第一个实例都带有双引号。
我不认为正则表达式会在这里删掉,我建议您根据JSON构建输出字符串:
let json = { foo: "bar", age: 23, test1: 1, test2: 2, test3: 3, }; let formattedJSONString = Object.entries(json) .reduce((acc, [key, value]) => `${acc} <span class='json-key'>"${key}": </span> <span class='value'>"${value}"</span>,<br/>`, `{<br/>`) + `}`; document.write(formattedJSONString);
.json-key { color: blue; margin-left: 8px; font-family: monospace; } .value { font-family: monospace; }
这是您的工作方式:
(?<=") (.*?) (?=":)
1 2 3
然后,将其替换为:
<span style="color: red;">$1</span>
我为此使用了递归。
JSON 对象
let json = {
foo: "bar",
age: 23,
foo2: {
hello: "world",
world: "hello"
},
};
此函数将遍历 JSON 对象并将其键和值添加到 span 标签中,并使用 JSON 语法标记分隔它们
let json = { foo: "bar", age: 23, hi: "bye", bar: { hi: "now", now: "hi" } }; let stylizedJson = "<span class='syntax'>{</span><br/>" + createFormattedJSON(json,24) + "<br/><span class='syntax'>}</span>"; document.write(stylizedJson); function createFormattedJSON(data, margin) { var formattedJson = ''; Object.entries(data).forEach(([key, value]) => { formattedJson += `<span style='margin-left:${margin}px;' class='json-key'>"${key}"</span><span class="syntax" ${this.scope}>:</span>` if (typeof value == "object") { formattedJson += `<span class='syntax'>{</span><br/>` formattedJson += this.createFormattedJSON(value, margin + 12) formattedJson += `<br/><span style='margin-left:${margin}px;' class='syntax'>}</span>` } else { if (Object.keys(data).reverse()[0] != key) formattedJson += `<span class='value'>"${value}"</span><span class="syntax">,</span><br/>` else formattedJson += `<span class='value'>"${value}"</span>` } }) return formattedJson; }
.json-key { color: #7A01FF; margin-left: 10px; font-family: Consolas; } .value { color: #F9D372; font-family: Consolas; } .syntax { color: #EEEEEE; font-family: Consolas; } body { background-color: #232932; padding: 12px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/typescript/4.5.4/typescript.min.js"></script>
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.