当前位置: 首页 > 面试题库 >

用于解析单个键的正则表达式:JavaScript中的JSON值

阳枫涟
2023-03-14
问题内容

我想看看是否有可能查找个人keys一出JSON字符串中的Javascript并返回它ValueRegex。有点像构建JSON搜索工具。

想象以下JSON

"{
    "Name": "Humpty",
    "Age": "18",
    "Siblings" : ["Dracula", "Snow White", "Merlin"],
    "Posts": [
        {
            "Title": "How I fell",
            "Comments": [
                { 
                    "User":"Fairy God Mother",
                    "Comment": "Ha, can't say I didn't see it coming"
                }
            ]
        }
    ]
}"

我希望能够搜索JSON字符串并仅提取单个属性。

让我们假设它function已经是一个,看起来就像。

function getPropFromJSON(prop, JSONString){
    // Obviously this regex will only match Keys that have
    // String Values.
    var exp = new RegExp("\""+prop+"\"\:[^\,\}]*");
    return JSONString.match(exp)[0].replace("\""+prop+"\":","");    
}

这将返回的子串ValueKey

例如

getPropFromJSON("Comments")

> "[
    { 
        "User":"Fairy God Mother",
        "Comment": "Ha, can't say I didn't see it coming"
    }
]"

如果您想知道为什么为什么要代替使用它JSON.parse(),我正在建立一个JSON文档存储localStoragelocalStorage仅支持键/值对,因此我JSON将整个字符串存储Document在unique中Key。我希望能够在文档上运行查询,理想情况下无需JSON.parsing()整个Collection过程的开销,Documents然后遍历Keys/
nested Keys来查找匹配项。

我不是最擅长的,regex所以我不知道该怎么做,或者regex独自一人是否有可能。这只是一个实验,以找出是否可能。任何其他想法作为解决方案将不胜感激。


问题答案:

我强烈建议您不要这样做。JSON不是此处明确指出的常规语言:https : //cstheory.stackexchange.com/questions/3987/is-
json-a-regular-language

引用以上文章:

例如,考虑一个由数组组成的数组:

[ [ [ 1, 2], [2, 3] ] , [ [ 3, 4], [ 4, 5] ] ]

显然,您无法使用真正的正则表达式进行解析。

我建议将JSON转换为对象(JSON.parse),并实现find函数遍历该结构。

除此之外,您还可以查看Douglas
Crockford的json2.js解析方法的内容。也许经过更改的版本将允许您搜索JSON字符串并仅返回您要查找的特定对象,而无需将整个结构转换为对象。仅当您从不从JSON检索任何其他数据时才有用。如果这样做的话,您可能也已经将整个事情从一开始就进行了转换。

编辑

为了进一步展示正则表达式是如何分解的,下面是一个正则表达式,它试图解析JSON

如果将其插入http://regexpal.com/,并选中“全部匹配”。您会发现它可以很好地匹配某些元素,例如:

正则表达式

"Comments"[ :]+((?=\[)\[[^]]*\]|(?=\{)\{[^\}]*\}|\"[^"]*\")

JSON匹配

"Comments": [
                {
                    "User":"Fairy God Mother",
                    "Comment": "Ha, can't say I didn't see it coming"
                }
            ]

正则表达式

"Name"[ :]+((?=\[)\[[^]]*\]|(?=\{)\{[^\}]*\}|\"[^"]*\")

JSON匹配

"Name": "Humpty"

但是,一旦您开始查询具有嵌套数组的高级结构(例如“帖子”),就会发现您无法正确返回该结构,因为正则表达式没有上下文,其中“]”是指定的结尾结构体。

正则表达式

"Posts"[ :]+((?=\[)\[[^]]*\]|(?=\{)\{[^\}]*\}|\"[^"]*\")

JSON匹配

"Posts": [
  {
      "Title": "How I fell",
      "Comments": [
          {
              "User":"Fairy God Mother",
              "Comment": "Ha, can't say I didn't see it coming"
          }
      ]


 类似资料:
  • 我需要解析一个逗号分隔的文本文件,其中一行可以包含一个json作为列值。该文件还包含一个标题行。 我试图构建一个正则表达式,这样我就可以解析文件并为文件的每一行和hashmap列表创建hashmap。 我意识到regex可能会过于复杂,但我不知道还能如何设计代码来获得每行的hashmap。 我尝试了不同的方法——从SO和其他网站上的例子,但无法获得良好的工作表达。它们处理不同的部分,但不处理整个数

  • 问题内容: 我想获取HTML中隐藏的输入字段的值。 我想用Python编写一个正则表达式,该表达式将返回的值,因为我知道HTML中的行遵循以下格式 有人可以提供Python范例来解析HTML值吗? 问题答案: 对于这种特殊情况,BeautifulSoup比正则表达式更难编写,但是它更健壮…我只是为BeautifulSoup示例提供帮助,因为您已经知道要使用哪个正则表达式:-)

  • 本文向大家介绍JavaScript正则表达式解析URL的技巧,包括了JavaScript正则表达式解析URL的技巧的使用技巧和注意事项,需要的朋友参考一下 正则表达式是一个描述字符模式的对象。 首先,此片文章并不是直接告诉你,url的正则表达式是什么,以及怎么使用这个正则表达式去解析一个URL地址,相信这种问题在网络上已经能找到很多。本文的宗旨在于教你如何理解URL的正则表达式,以达到理解正则表达

  • 我不确定是否可以这样做,但我想将一个非常简单的JSON文件解析为一个字符串数组。 示例文件: 到目前为止,我认为我应该使用带有模式的扫描仪来获得我的输出,但没有做到这一点。 因为这个模式显然是错误的,因为它认为“,”是合适的,但我希望它不包括在内...: S 我也接受一些建议,这些建议可能会以任何其他方式被解析。也许是JSON解析器?但是因为文件太简单了,我认为没有必要。

  • 本文向大家介绍javascript中的正则表达式使用详解,包括了javascript中的正则表达式使用详解的使用技巧和注意事项,需要的朋友参考一下 [1]定义:正则又叫规则或模式,是一个强大的字符串匹配工具,在javascript中是一个对象 [2]特性:   [2.1]贪婪性,匹配最长的   [2.2]懒惰性,不设置/g,则只匹配第1个 [3]两种写法:   [3.1]perl写法(使用字面量形

  • 问题内容: 我正在寻找一个.NET正则表达式来提取网页中的所有URL,但是还没有找到一个足以涵盖指定链接的所有不同方式的URL。 还有一个问题: 是否有 一个正则表达式可以统治所有人 ?还是我最好使用一系列不那么复杂的正则表达式,而只对原始HTML使用多重传递?(速度与可维护性) 问题答案: ((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+) 我从regexlib