javascript - 如何匹配以 4 位数字开头但忽略前面有冒号的字符串
问题描述
我正在尝试匹配以 4 位数字开头的所有子字符串,但数字前面有冒号的子字符串除外。
到目前为止,我有以下内容:
细绳:
1547 blabla bla 2458 blablabla bla:1548 blabla 8547 blablabla
正则表达式:
\d{4} .*?(?=\d{4})
这导致以下结果:
1547 blabla bla
2458 blablabla bla:
1548 blabla
然而,期望的结果是:
1547 blabla bla
2458 blablabla bla:1548 blabla
8547 blablabla
我尝试了以下但没有成功:
(?<!:)\d{4} .*?(?=\d{4})
解决方案
你可以使用这个正则表达式:
\b\d{4}\b.*?(?=[^:]\d{4}\b|$)
正则表达式解释
\b
: 字边界\d{4}
: 匹配 4 位数字\b
: 字边界.*?
: 匹配 0 个或多个任意字符(惰性匹配)(?=[^:]\d{4}\b|$)
: 提前断言我们前面有非冒号字符和 4 位数字的单词,或者有行尾位置
或者,您也可以将此正则表达式与嵌套的否定后视一起使用:
\b\d{4}\b.*?(?=(?<!:)\d{4}\b|$)
推荐阅读
- javascript - 无法使用 ioredis 终止来自 Node JS 的 Redis 连接
- javascript - 将函数与 Apps 脚本匹配以查找最接近但小于日期
- python - 如何使用在内部使用`kubectll apply -f`的python创建部署
- java - 请有人帮助我,当我单击 Bind 并给我这个错误时,我的项目崩溃了,nullpointexception
- youtube-api - YouTube API - OAuth 流程中缺少 YouTube Studio 管理的品牌帐户
- java - 如何使用数组字段验证表单?
- c++ - 继承和访问属性
- templates - 如何在jsf bootsrap中从xhtml页面插入一个单词到模板页面
- c# - 我可以在 C# 桌面应用程序中创建实时推送通知吗?
- python - 使用 zfill 根据数据框列中的字符串填充数字列