Quantifiers (Repetition)

To match 3 digit patterns, we can use [0-9][0-9][0-9]. What if we have n digit patterns? We have to write [0-9] n times, but that is a waste of time. Here is when quantifiers come for help.

  1. Limiting repetitions({min, max}): To match n digit patterns, we can simply write [0-9]{n}. Instead of n, by providing minimum and maximum values as-[0-9]{min, max}, we can match a pattern repeating min to max times.

    Let's see an example to match all numbers between 1 to 999.

Note: If you don't write the upper bound({min,}), then it basically means, there is no limit for maximum repetitions.

  1. + quantifier: It is equivalent to {1,}-at least one occurrence.

  2. *quantifier: It is equivalent to {0,}-zero or more occurrences.

    1. ? quantifier: It is equivalent to {0,1}, either zero or one occurrence. ? is very useful for optional occurrences in patterns.

    Let's see an example to match negative and positive numbers.

Now, you may be thinking, what if we want to match characters like *, ?, +, {, } in the text, they are special characters. Check it out in the appendix.

Problems

  1. Find out a regex to match positive integers or floating point numbers with exactly two characters after the decimal point.

    Answer: \d+(\.\d\d)?

  2. Predict the output of the following regex: RegEx: [abc]{2,}
    Text: aaa abc abbccc avbcc

    Answer:

Nature of Quantifiers

HTML tag is represented as some text. For example, <title>Regular expression</title>

So, can you figure out an expression that will match both & ?

Most of the people will say, it is <.*>. But it gives different result.

So, rather than matching up till first >, it matches the whole tag. So, quantifiers are greedy by default. It is called Greediness!.

To solve this issue, we use ? quantifier and it is called lazy matching. We will discuss it next.

Predict the output of the following regex: RegEx: (var|let)\s[a-zA-Z0-9_]\w* =\s"?\w+"?;
Text: var carname = "volvo"; console.log(carname); let age = 8; var date = "23-03-2020";

Answer: