Quantificadores em Expressões Regulares - JavaScript
Além das classes especiais de caracteres de expressões regulares que abordamos em artigos anteriores, existe outro grupo de combinações que especifica como os caracteres em uma string serão repetidos. Essas combinações são chamadas de quantificadores:
: corresponde a qualquer número de repetições de uma sequência de caracteres, inclusive a sua ausência.*
: corresponde a uma ocorrência da sequência de caracteres ou à sua ausência na string. Por exemplo,?
corresponde às substrings "home" e "ome"./h?ome/
: corresponde a uma ou mais repetições da sequência de caracteres.+
: corresponde a n repetições do caractere anterior. Por exemplo,{n}
corresponde à substring "hhh".h{3}
: corresponde a n ou mais repetições do caractere anterior. Por exemplo,{n,}
corresponde às substrings "hhh", "hhhh", "hhhhh", etc.h{3,}
: corresponde a um número de repetições do caractere anterior que varia de n a m. Por exemplo,{n,m}
corresponde às substrings "hh", "hhh", "hhhh".h{2, 4}
Caracteres Opcionais
Um número de telefone pode ter hífens para separar blocos individuais de dígitos, como "+1-234-567-8901", ou pode não ter separadores, como "12345678901". Assim, neste caso, os hífens são opcionais, e podemos refletir isso com o quantificador ?
const exp = /\d-?\d\d\d-?\d\d\d-?\d\d\d\d/;
const phone1 = "+1-234-567-8901";
const phone2 = "12345678901";
const phone3 = "1-2345678901";
console.log(exp.test(phone1)); // true
console.log(exp.test(phone2)); // true
console.log(exp.test(phone3)); // true
Aqui, -?
Quantidade Arbitrária de Caracteres
O símbolo *
const exp = /a*/; // corresponde a qualquer quantidade de caracteres a
const str1 = "";
const str2 = "a";
const str3 = "aa";
console.log(exp.test(str1)); // true
console.log(exp.test(str2)); // true
console.log(exp.test(str3)); // true
Caractere aparece pelo menos uma vez
O quantificador +
const exp = /a+/; // corresponde a pelo menos um caractere "a";
const str1 = "";
const str2 = "a";
const str3 = "aa";
console.log(exp.test(str1)); // false
console.log(exp.test(str2)); // true
console.log(exp.test(str3)); // true
Quantidade Exata de Ocorrências
O quantificador {n}
/\d{11}/
\d
const exp = /\d{11}/;
const phone1 = "+12345678901";
const phone2 = "1-2345678901";
const phone3 = "12345678901";
console.log(exp.test(phone1)); // true
console.log(exp.test(phone2)); // false
console.log(exp.test(phone3)); // true
Mas e se os blocos de números forem separados por um hífen, como em "+1-234-567-8901"? Nesse caso, poderíamos definir o comprimento de cada bloco: /\d-\d{3}-\d{3}-\d{4}/
const exp = /\d-\d{3}-\d{3}-\d{4}/;
const phone1 = "+12345678901";
const phone2 = "1-234-567-8901";
const phone3 = "12345678901";
console.log(exp.test(phone1)); // false
console.log(exp.test(phone2)); // true
console.log(exp.test(phone3)); // false
Combinando com outros quantificadores, podemos tornar os hífens opcionais:
const exp = /\d-?\d{3}-?\d{3}-?\d{4}/;
const phone1 = "+12345678901";
const phone2 = "1-234-567-8901";
const phone3 = "1-2345678901";
console.log(exp.test(phone1)); // true
console.log(exp.test(phone2)); // true
console.log(exp.test(phone3)); // true
Definição de Quantidade Mínima de Ocorrências
O quantificador {n,}
const exp = /\w{8,}/;
const code1 = "1234567890";
const code2 = "qwery5";
const code3 = "password123";
console.log(exp.test(code1)); // true
console.log(exp.test(code2)); // false
console.log(exp.test(code3)); // true
O metassímbolo \w
/\w{8,}/
Definição de Quantidade Mínima e Máxima de Ocorrências
O quantificador {n,m}
const exp = /^[a-zA-Z]{3,10}$/;
const code1 = "Tom";
const code2 = "Li";
const code3 = "Maximilianus";
console.log(exp.test(code1)); // true
console.log(exp.test(code2)); // false
console.log(exp.test(code3)); // false
A expressão /^[a-zA-Z]{3,10}$/
^
$