0

I need to create a RegExp that will allow me to use groups to properly parse a string for some comparison logic.

consider the following list of strings:

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

Note the -2 and _3 which are valid methods of versioning in this naming convention. We wish to maintain support for such.

If we loop through the above set, I am expecting the entire string, WITHOUT versioning if it exists (as shown below)...

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

so far I have the following regex /([-_]\d?)$/gi which does properly identify the versioning at the end of the string. From here, I would like to create an additional group that matches everything that is NOT the versioning convention, but I can't seem to figure it out...

1 Answer 1

1

You just need to match everything before the versioning at the end. But you also need lazy matching, which is what +? - see this question for more.

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);

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.