简单的字符替换正则表达式,标记化 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(/[.[\]]+/));
我正在尝试标记一个 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(/[.[\]]+/));