简单的字符替换正则表达式,标记化 jsonpath

simple character replacement regex, tokenizing jsonpath

我正在尝试标记一个 jsonpath 字符串。例如,给定如下字符串:

$.sensor.subsensor[0].foo[1][2].temp

我要["$", "sensor", "subsensor", "0", "foo", "1", "2", "temp"]

我对正则表达式很糟糕,但我设法想出了以下根据正则表达式匹配“。”的内容。和“[”和“]”。假设 jsonpath 字符串不包含切片、通配符、联合或递归下降。

[\.\[\]]

我打算匹配所有“.”和“[”和“]”字符并将它们替换为“;”。然后我将拆分“;”。

上述正则表达式的问题是在某些情况下我会得到“;;”。

$;sensor;subsensor;0;;foo;1;;2;;temp

有没有一种方法可以在单个正则表达式中替换“.”、“[”、“]”以及“.[”和“]”。或“][”与“;”?我需要明确检查这些组还是需要 运行 通过 2 个正则表达式的序列?

您可以使用此代码省略 double semicolon:

console.log(
'$.sensor.subsensor[0].foo[1][2].temp'.replace(/[\.\[\]]+/g, ';')
)

找到了一个不错的解决方案。

/(\.|\].|\[)/g

显然,当您使用 [] 作为仅匹配单个字符的正则表达式的一部分时,这就是为什么像“]”这样的组。变得 ”;;”。使用 () 可以指定字符组,上面的组只是列举了可能性。

无需将.[]转化为;,直接拆分即可:

console.log('$.sensor.subsensor[0].foo[1][2].temp'.split(/[.[\]]+/));