I have the following regexp:
/^(?:(?:>|<)?[a-zA-Z]+(?:(?:\+|-)\d*\.?\d*(?:em)?)?)(?:<[a-zA-Z]+(?:(?:\+|-)\d*\.?\d*(?:em)?)?)?$/
Which you can think about like this:
^
(?:
(?:>|<)?
[a-zA-Z]+
(?:(?:\+|-)\d*\.?\d*(?:em)?)?
)
(?:
<
[a-zA-Z]+
(?:(?:\+|-)\d*\.?\d*(?:em)?)?
)?
$
It is effectively the same pattern repeated once or twice with a small difference. The core of each pattern is one or more letter [a-zA-Z]
followed by an optional minus or plus and a numeric value possibly followed by em
. The first instance can start with either <
or >
and the second instance can only start with <
.
So the following are all valid:
`alpha`,
`alphaBravo`,
`alphaBravoCharlie`,
`>alpha`,
`<alpha`,
`>alpha+10`,
`<alpha+10`,
`>alpha+1.5`,
`<alpha+1.5`,
`>alpha-10`,
`>alpha-10`,
`>alpha-1.5`,
`>alpha-1.5`,
`>alpha+10em`,
`<alpha+10em`,
`>alpha+1.5em`,
`<alpha+1.5em`,
`>alpha-1.5em`,
`>alpha-1.5em`,
`alpha-50em<delta-100em`,
`alpha-50em<delta+100em`,
`>alpha-50em<delta+100em`,
My problem is that if the first instance starts with a <
then the second instance shouldn't be allowed, so the following should be invalid:
<alpha<bravo
Is it possible to add this restriction to the regexp?
The two approaches I can think of are:
- Check the first character and make the second instance invalid if it is
<
- Check if
<
has already ocurred in the string (or if<
occurs again in the string) and if so, make the second instance invalid.
However I'm not sure how to implement either of these approaches here.