带有特定符号的正则表达式数学路径

本文关键字:正则表达式 路径 符号 | 更新日期: 2023-09-27 17:53:07

目前我有这样的字符串:"document.info.userId" (json属性路径)和regex模式来验证它们:(['w]+'.)+['w]+$

,但似乎有这样的字符串:"document.role#0.id"(一些额外的标记数组),他们是有效的,但我不能找出哪个regexp模式使用。这个指数(#0,#1…等)只能在dot之前,而不能在任何路径部分的中间。

我已经尝试了模式(['w#]+'.)+['w#]+$(['w]+(#'d+)*'.)+['w]+(#'d+)*$,但它们传递的无效路径如下:test.some#a.hello

应该通过:

"document.role.id"
"document.role.id.and.other.very.long.path.example"
"document.role#0.id"
"document#1.role#0.id"
"document#1.role#0#1.id"
"document#1.role#0#1.id#21" - terrible representation of array in array

不应该通过:

"document."
"document.role."
".document"
"test.some#a.hello"
"docum#ent.role.id"
"document.role.#id"
"docu#1ment.role.id"
"document.ro#0#1le.id"

带有特定符号的正则表达式数学路径

Try

^'w+(?:#'d+)*(?:'.'w+(?:#'d+)*)*$

它首先检查一个单词后面跟着任意数量的索引(#N)。这可以选择后跟任意数量的.,并再次进行相同的检查(一个单词和索引)。

点击regex101查看

您可以添加一个可选的#['d]:

^(['w]+(#['d])*'.)+['w]+$
       ^^^^^^^^

这样,文本#N, N为整数,可以或不可以发生。

在https://regex101.com/r/mZ3mZ6/2

中看到它与一些示例输入一起运行

考虑到你后来添加的所有样本:

^(['w]+(#['d]+)*'.)+['w]+(#['d]+)*$

这样我们也检查#N, N是任何整数(不只是一个数字),也允许最后一个块包含这样的说明符。

查看它在https://regex101.com/r/mZ3mZ6/3中传递的所有情况

长但有效的解决方案:

^('w+(?:(#['d]+)*)?'.)('w+(?:(#['d]+)*)?'.)+('w+(?:(#['d]+)*)?)