Busca em String com JavaScript
Para buscar uma substring em uma string que corresponda a uma expressão regular, utiliza-se o método exec()
do objeto RegExp
. Esse método recebe uma string para busca e retorna o resultado como um array. Veja o exemplo a seguir:
const contacts = "Email: mycomp@gmail.com Phones: +1-234-567-8901 and +1-234-567-8902";
const phonePattern = /\+\d-\d{3}-\d{3}-\d{4}/;
const result = phonePattern.exec(contacts);
console.log(result);
Saída no console:
['+1-234-567-8901', index: 32, input: 'Email: mycomp@gmail.com Phones: +1-234-567-8901 and +1-234-567-8902', groups: undefined]
Aqui, verificamos se na string contacts
há texto que corresponda à expressão regular phonePattern
(isto é, representa um número de telefone). O resultado é um array contendo os seguintes elementos:
- O primeiro elemento do array é o texto que corresponde à expressão regular. No exemplo acima, é o texto "+1-234-567-8901".
- O segundo parâmetro,
index
, é o índice do texto encontrado na string. - O terceiro parâmetro,
input
, é a string de entrada. - O último elemento representa grupos separados.
Se o texto que corresponde à expressão regular não for encontrado na string, o retorno será null
.
Para extrair os elementos individuais desse array:
const contacts = "Email: mycomp@gmail.com Phones: +1-234-567-8901 and +1-234-567-8902";
const phonePattern = /\+\d-\d{3}-\d{3}-\d{4}/;
const result = phonePattern.exec(contacts);
if (result) {
console.log("Phone number:", result[0]); // +1-234-567-8901
console.log("Index:", result.index); // 32
}
No entanto, há dois números de telefone na string (e pode haver mais). Se quisermos extrair todos esses números, e não apenas o primeiro, devemos usar a flag g
.
Alteremos o exemplo anterior aplicando a flag g
:
const contacts = "Email: mycomp@gmail.com Phones: +1-234-567-8901 and +1-234-567-8902";
const phonePattern = /\+\d-\d{3}-\d{3}-\d{4}/g;
let result;
while ((result = phonePattern.exec(contacts)) !== null) {
console.log("Phone number:", result[0]);
console.log("Index: ", result.index);
}
No ciclo while, extraímos todas as correspondências do padrão com o texto na variável result
, até que não haja mais correspondências. Note onde a flag g
é indicada na expressão regular: /\+\d-\d{3}-\d{3}-\d{4}/g
.
Saída no console:
Phone number: +1-234-567-8901 Index: 32 Phone number: +1-234-567-8902 Index: 52