如何在javascript中使用RegExp分组来解析字符串

ojsjcaue  于 2022-11-18  发布在  Java
关注(0)|答案(1)|浏览(126)

我需要创建一个RegExp,它将允许我使用组来正确地解析字符串以获得一些比较逻辑。
考虑以下字符串列表:

const testSet: string[] = [
    "alpha-4181a",
    "alpha-4181a-2",
    "alpha-4181a_3",
    "example",
    "smokeTest"
]

请注意-2_3,它们是此命名约定中有效的版本控制方法。我们希望保持对它们的支持。
如果我们循环上述集合,我期待的是整个字符串,如果它存在的话,则不带版本控制(如下所示)...

const returnSet: string[] = [
"alpha-4181a",
"alpha-4181a",
"alpha-4181a",
"example",
"smokeTest"
]

到目前为止,我已经有了下面的正则表达式/([-_]\d?)$/gi,它正确地标识了字符串末尾的版本。从这里,我想创建一个额外的组,它匹配所有不是版本约定的内容,但我似乎无法弄清楚...

lb3vh1jj

lb3vh1jj1#

你只需要在最后的版本化之前匹配所有的东西,但是你也需要惰性匹配,这就是+?-更多信息请参见this question

const testSet = [
    "alpha-4181a",
    "alpha-4181a-2",
    "alpha-4181a_3",
    "example",
    "smokeTest"
];

const resultSet = testSet.map((x) => x.match(/^(.+?)(?:[_-]\d)?$/)?.[1] ?? x);
//                                                  ^^^^^^^^^^ versioning here
//                                             ^^^^^ match everything before
console.log(resultSet);

相关问题