【发布时间】:2020-02-11 06:42:01
【问题描述】:
我已经用谷歌搜索并完成了堆栈溢出问答,但没有找到这个确切的场景。我有一个像这样的对象:
props: {
"label": "1rem",
"text3": "1rem",
"text2Button": "1rem",
"1": "1rem",
"5spacing": 2
}
我正在使用此正则表达式模式来捕获对象属性名称并删除基于 simplified version of another answer 的双引号:
/"([^"]+)":/g
这很好用,但我希望数字保留双引号,所以我将其更改为:
/"([^"0-9]+)":/g
但是,这仅匹配 "label" 并且任何带有数字的属性都被排除在外。我明白为什么会发生这种情况,但我不知道如何匹配其中包含数字的属性,但排除那些 以数字开头的属性。
所需的正则表达式模式将匹配 "label"、"text3" 和 "text2Button",这样我就可以将对象转换为:
props: {
label: "1rem",
text3: "1rem",
text2Button: "1rem",
"1": "1rem",
"5spacing": 2
}
(我不知道如何将排除 ^ 与字符串 ^ 的开头结合起来。我也不知道添加 | 运算符的正确位置,或者如果那甚至是正确的方法。)
【问题讨论】:
-
有什么理由使用正则表达式来解析 JavaScript 中的 JSON 吗? JSON 中的键也应该是字符串。
-
这是在 JSON 被解析为字符串后应用的。最终结果不是 JSON。
-
为什么不直接使用:let obj = JSON.parse(str);初始化你的对象?
-
另外 parseInt(str) 将产生“NaN”,除非字符串 (str) 以数字开头,所以我相信另一个选择是检查 !!parseInt(property) 的真实性,因为 NaN 是假的。
标签: javascript json regex