我正在努力解析以下字符组合:
我有两种类型的文本:
1. AF-B-W23F4-USLAMC-X99-JLK
2. LS-V-A23DF-SDLL--X22-LSM
我想获取破折号内用 - 分隔的最后两个字符组合。
来自 1. X99-JLK
和 2. X22-LSM
我使用以下正则表达式完成了 2.'--(.*-.*)'
我如何解析 1. 示例,是否有任何选项可以使用 OR 运算符等一次性解析它?
感谢您的帮助!
最佳答案
您尝试的模式 --(.*-.*)
与第二个示例匹配,因为它包含 --
并且与第一个匹配项匹配。
然后它匹配直到字符串末尾并回溯以找到另一个连字符。
由于 .*
可以匹配任何字符(也包括 -
),并且没有设置 anchor 或边界,因此这是一个非常广泛的匹配。
如果必须有 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]);
}
})
关于正则表达式匹配未知字符,中间有破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68643129/