带有特定符号的正则表达式数学路径
本文关键字:正则表达式 路径 符号 | 更新日期: 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]+)*)?)