I want to write a regex for the following strings to include all strings:
B9966
ch6258
028
chIRZ170
IRZ170
B8966A
BA966C
The OUTPUT should be as follows:
966
6258
028
170
170
966A
BA966C
Conditions:
I wanted to write with conditions in regex (ie: (?(?condition)then|else)
) but found that javascript does not support conditions.
For example, the following solution works fine, but I'm looking for a more professional regex:
^\d+.|(?<=^\D{1}\d)\d+.|(?<=^\D{2,})\d+.
For your example data, you can remove either an uppercase case followed by a single digit, or remove all non digits.
[A-Z]\d|[^\d\n]+
const regex = /[A-Z]\d|[^\d\n]+/g;
[
"B9966",
"ch6258",
"028",
"chIRZ170",
"IRZ170"
].forEach(s => console.log(s.replace(regex, '')));
Edit
For the updated examples, you could start the match with a non digit followed by a digit, or match 1+ non digits:
\b(?:[^\d\n]\d|[^\d\n]+)
To not touch the last example, you can use a negative lookahead:
\b(?:[^\d\n]\d|(?![A-Z]{2}\d)[^\d\n]+)
const regex = /\b(?:[^\d\n]\d|(?![A-Z]{2}\d)[^\d\n]+)/;
[
"B9966",
"ch6258",
"028",
"chIRZ170",
"IRZ170",
"B8966A",
"BA966C"
].forEach(s => console.log(s.replace(regex, '')));
Another regex can be used:
(?<!^\D)\d+.*
In the above regex, the Negative Lookbehind is used, ie if each character did not start with \D
before and is matched with the character \d
after.
Result: https://regex101.com/r/Av8pEq/1