【发布时间】:2017-12-25 00:07:38
【问题描述】:
我有几页 JSON 要像这样搜索:
"company": "chocolate factory"
"position": "founder"
"company": "chocolate packagers"
"position": "packager"
"company": "chocolate shop"
"position": "clerk"
我只想在第一次出现的“位置”后面没有创建者的情况下进行匹配。前面的例子不匹配,但下面的例子会匹配。
"company": "chocolate factory"
"position": "taster"
"company": "chocolate packagers"
"position": "founder"
"company": "chocolate shop"
"position": "clerk"
这看起来将匹配“位置”的第一次出现
("position": ")?
我认为这应该匹配第一次出现的“职位”,前提是它后面没有“创始人”
("position": ")?(?![^"]*founder)
我已经在 regexr.com 上尝试过,但它似乎无法正常工作。
这样做的正确方法是什么?
编辑:为了澄清,我只能在网络应用程序上使用搜索框。我猜它是一个 javascript 正则表达式,但我无法确定使用了哪些标志(这让事情变得很困难)......但我认为如果有意义的话,它是一个 SQL 数据库进行正则表达式搜索。
我只想匹配第一次出现的“位置”
(?:"position": ")?
但前提是后面没有“创始人”
(?:"position": ")?(?![^"]*founder)
或
(?:"position": "(?![^"]*founder))?
这种似乎适用于测试网站,但似乎不适用于网络应用程序。由于我不了解后端,因此我可能不会弄清楚这一点。
编辑:我发现了问题。这是 postgresql 正则表达式 - 转义略有不同,看起来它的搜索方式也有点不同。基本上,我不认为我想要的会起作用。
【问题讨论】:
-
您可以使用正则表达式,但我怀疑更好的方法是使用实际的 JSON 解析器。
-
试试
^((?!"position")[\s\S])*"position"(?![:\s]*"founder")之类的(不确定是否理解正确) -
不太清楚你想做什么。听起来像是经典的XY problem。我同意@Phylogenesis,听起来你实际上需要一个带有简单条件的JSON解析器。除非您的示例 JSON 确实是您所拥有的,在这种情况下您没有 JSON,否则您会有一系列用冒号分隔的字符串。
标签: regex regex-negation regex-lookarounds