regex - 正则表达式用破折号匹配未知字符
问题描述
我正在努力尝试解析以下字符组合:
我有两种类型的文本:
1. AF-B-W23F4-USLAMC-X99-JLK
2. LS-V-A23DF-SDLL--X22-LSM
我想在破折号内获得由 - 分隔的最后两个字符组合。
从 1.X99-JLK
和从 2.X22-LSM
我用下面的正则表达式完成了 2.'--(.*-.*)'
如何解析 1. 样本,是否有任何选项可以使用 OR 运算符一次解析它?
谢谢你的帮助!
解决方案
--(.*-.*)
您尝试的模式与第二个示例匹配,因为它包含--
并且匹配第一个匹配项。
然后它匹配直到字符串的末尾并回溯以找到另一个连字符。
由于.*
可以匹配任何字符(也-
)并且没有设置锚或边界,这是一个非常广泛的匹配。
如果必须有 2 个破折号,您可以匹配第一个破折号,并为使用否定字符类的第二个破折号的部分使用捕获组[^-]
字符类也可以匹配换行符。如果您不想匹配换行符,您可以使用[^-\r\n]
或不匹配空格[^-\s]
(因为示例数据中没有空格)
-([^-]+-[^-]+)$
解释
-
匹配-
(
捕获组 1[^-]+-[^-]+
匹配字符之间的第二个破折号-
)
关闭组 1$
字符串结束
查看正则表达式演示
例如使用 Javascript:
const regex = /-([^-]+-[^-]+)$/;
[
"AF-B-W23F4-USLAMC-X99-JLK",
"LS-V-A23DF-SDLL--X22-LSM"
].forEach(s => {
const m = s.match(regex);
if (m) {
console.log(m[1]);
}
})
推荐阅读
- javascript - 在按钮上单击发送整个
- sql - 使用可变 Excel 值查询 SQL 的最佳方法
- python - 在条件列表(掩码)python pandas 上施加 OR
- php - 如何将 jQuery 自动完成处理程序添加到在 PHP 中动态创建的表单?
- python - 为python数组中的所有元素添加一个滞后期
- flutter - Flutter 扩展方法不起作用,它说“未定义的类”和“需要扩展方法语言功能”
- mysql - 如何在一列MYSQL中将两个过去日期之间的日期分组
- sql - 如何在 sql server 的自由文本字段中找到 16 位字符串?
- powershell - 用于测试的 Docker 映像中特定版本的 Powershell
- javascript - 新手>如何搜索和排列提示词<