regex - If Else 正则表达式匹配
问题描述
我想构建一个正则表达式,在其中搜索包含连续 12 位数字的字符串。如果没有匹配项,则查找一行只有 10 位数字的字符串。
例如:
a123456789012a
a1234567890a
将返回:
123456789012
如果输入是:
a1234a
a1234567890a
它会返回:
1234567890
我设法为单个操作创建了正则表达式,分别(?<!\d)\d{10}(?!\d)
为 10 位和(?<!\d)\d{12}(?!\d)
12 位,但我无法将它们组合成 if-else 样式。
我尝试了以下方法:
(?(?<!\d)\d{12}(?!\d)|((?<!\d)\d{10}(?!\d)))
但如果第一个模式不匹配,正则表达式不会尝试匹配第二个,不返回任何内容
解决方案
您可以使用这样的简单正则表达式:
\d{12}|\d{10}
看,我没有使用multiline
也没有global
标志。这样,模式将找到您想要的第一个匹配项。
顺便说一句,如果要捕获内容,请使用捕获组:
(\d{12}|\d{10})
推荐阅读
- reactjs - 导航在 React Native 中的 axios 调用中不起作用
- node.js - 如何计算周时间的总和?
- python-3.x - 在 Eclipse 上设置 Python 插件时出错:使用不受支持的版本(Python 和 JPython)
- unit-testing - 如何为具有静态方法调用的休息控制器编写junit测试
- android - 将“没有可用的图表数据”文本更改为其他内容
- angular - ReferenceError:未定义 IDBIndex Angular SSR
- javascript - 我们可以在两个不同的 div 中渲染两个不同的内容吗?
- vscode-remote - vscode-remote 是否自动提交我对文件的修改仅存在于图像中
- sqlite - 找不到包'sqlite3' - sqlite3 已经安装
- javascript - 如何使用 node.js 和 socket.io 连接到已建立的服务器(不是本地主机)?