正则表达式以任意顺序匹配可选标记
Regular expression to match optional tokens in any order
我正在制作一个带有令牌的URL解析器来过滤返回的结果,这些令牌是可选的,可以按任何顺序设置,我只需要在它们存在时获取参数。
我已经制作了一个可以获取令牌的正则表达式,但顺序很重要:
'/test('/page'/[0-9]+)?('/criticality'/[0-9]+)?('/order'/[a-zA-Z0-9]+)?
你可以在这里测试
在这个例子中,我会得到/page/1
、/order/toto
和/criticality/5
,但临界性没有得到。
如何获得任何顺序的代币?
您可以在模式的开头用正的lookahead获取它们,并捕获lookahead中的文本,但您将列出所有可能的值组合,这些值会使正则表达式解决方案看起来很难看:
^(?=.*'/test('/page'/[0-9]+))(?=.*('/criticality'/[0-9]+))(?=.*('/order'/[a-zA-Z0-9]+))|^(?=.*'/test('/page'/[0-9]+))(?=.*('/order'/[a-zA-Z0-9]+))|^(?=.*'/test('/page'/[0-9]+))(?=.*('/criticality'/[0-9]+))|^(?=.*('/criticality'/[0-9]+))(?=.*('/order'/[a-zA-Z0-9]+))|^(?=.*('/criticality'/[0-9]+))|^(?=.*('/order'/[a-zA-Z0-9]+))|^(?=.*'/test('/page'/[0-9]+))
参见演示
正如您所看到的,regex是不可维护的。使用/
分割输入字符串,然后检查数组是否包含键。如果是,您将获得键后面的元素的值。
使用交替运算符。
'/test('/page'/[0-9]+)|('/criticality'/[0-9]+)|('/order'/[a-zA-Z0-9]+)
演示
但如果以上任何一个人在场,这将是匹配的。预计三人都不会出席。
相关文章:
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 按顺序添加和删除类
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript-根据赋值顺序,按键合并对象数组
- 使用jquery队列按顺序淡入任意数量的文本行
- 设置自定义覆盖和多边形的任意z索引顺序
- 用任意顺序的字符串数组匹配字符串
- 我如何存储for循环的计数,承诺以任意顺序返回
- Javascript正则表达式:匹配任意顺序的2个子字符串
- 用正则表达式替换行中的N个字符串,其中N个字符串可以在行中的任意顺序
- 由多个单词(任意顺序)组成的不重复的正则表达式
- 正则表达式以任意顺序匹配可选标记
- 如何从任意顺序的两个选择表单中找到这两个数字
- 任意顺序可选
- 正则表达式,以任意顺序匹配至少两个特殊字符
- 使用backboneJS集合以任意顺序搜索单词
- 使用JS以任意顺序搜索单词