regex - 如何设置正则表达式部分的最大长度?
问题描述
^[A]+(C[A]+)*.....$
我的表达式末尾的句点是我的正则表达式的延续是否可以在此段(^[A]+(C[A]+)*
)上设置最大长度?
谢谢你的任何答案
解决方案
是的,如果您知道在该段之后必须或不应该出现什么,您可以使用积极的前瞻来执行此操作,或者如果支持,您可以使用后瞻。
例如,如果您想将^[A]+(C[A]+)*
正则表达式的段限制为 5 个字符,并且确定后面^[A]+(C[A]+)*.....$
不能有A
or字符,则可以使用:C
const rx = /^(?=.{1,5}[^AC])[A]+(C[A]+)*.....$/;
console.log(rx.test('AAACAxxxxx')); // true (5 character segment)
console.log(rx.test('AAAACAxxxxx')); // false (6 character segment)
console.log(rx.test('AAAAACxxxx'));
// false (5 character segment, but followed by C)
正向前瞻(?=.{1,5}[^AC])
规定该段的长度必须介于1
和5
字符之间,并且后跟一个不是A
or的字符C
。
再次查看上面的最后一个示例,测试返回false
但我们希望它返回true
,因为'AAAAACxxxx'
它匹配模式^[A]+(C[A]+)*.....$
并且AAAAA
匹配段的子字符串^[A]+(C[A]+)*
长度不超过 5 个字符。
为了解决这种边缘情况,我们可以[^AC]
在前瞻中替换为,([^AC]|C[^A])
这样C
只要它后面没有A
.
var rx = /^(?=.{1,5}([^AC]|C[^A]))[A]+(C[A]+)*.....$/;
console.log(rx.test('AAAAACxxxx')); // true
你能想出一个字符串,上面的正则表达式匹配它不应该匹配,或者不匹配它应该匹配吗?
推荐阅读
- sql-server - 为什么 SSMS 中的“查询”窗格无法完全识别我的表?
- python - 有没有办法将图片链接标记为剧透 - Discord bot
- vim - 如何在 Neovim 的新选项卡中打开终端,只使用一个命令而不重新映射?
- wordpress - WordPress 损坏的应用程序尝试 wpscan kali 工具
- macos - pgAdmin4:我选择什么用户名?
- python - python selenium webdriver 无法找到具有显式等待的元素
- asp.net-mvc - 在 aks 集群中发生 pod 故障时如何识别实际异常
- parallel-processing - CUDA C/C++:异步内核错误:遇到非法内存访问
- python - 如何在 Python 中的非默认参数之前声明具有默认参数的函数?
- vue.js - JS 增强的表单组件不尊重 Vue 中的排序/过滤