I have totally 5 inputs like this,
A-01
AB - A2-01:xyz word (*)
AB - A3-02a:xyz word (*):xyz word (*)
AB - A-01:xyz word (*)
xyz-word (*)
Trying to get only last number after the special character -
Expected result after applying regex:
01
01
02
01
empty(just return empty)
Regex:
const input2 = 'AB - A2-01:xyz word (*)';
console.log(input.match("[^-] $")[0]);
input.match("[^-] $")[0] regex works for first input A-01. It returns 01. For second input it prints as, 01:xyz word (*). After the number, I don't need the rest of the characters.
I am trying this in Angular TypeScript using regex.
CodePudding user response:
This will capture the first number after the last -:
const inputs = ['A-01',
'AB - A2-01:xyz word (*)',
'AB - A3-02a:xyz word (*):xyz word (*)',
'AB - A-01:xyz word (*)',
'xyz-word (*)'];
for (const input of inputs) {
m = input.match(/^.*-[^\d]*(\d )/);
if (m) {
console.log(m[1]);
}
}
The regex explained:
^- start of line anchor.*- any character 0 or more times (greedy)-- a literal-[^\d]*- any non-digit, 0 or more times (greedy)(- start of capture group\d- any digit, 1 or more times
)- end of capture group
You'll then find the captured number in m[1] (if any - check m first).
If you instead want an array where the non-matching entries are "empty" (undefined), you could map the inputs using an arrow function expression and use an empty () capture for the non-matches.
const inputs = ['A-01',
'AB - A2-01:xyz word (*)',
'AB - A3-02a:xyz word (*):xyz word (*)',
'AB - A-01:xyz word (*)',
'xyz-word (*)'];
a = inputs.map(input => input.match(/^.*-[^\d]*(\d )|()/)[1]);
console.log(a);
Disclaimer: This is my first javascript ever so I may have done it in a cumbersome, non-idiomatic, way
