Expressões regulares
Um padrão corrido contra texto é uma expressão regular. /tea/ pergunta se tea aparece. replace devolve uma cadeia nova e põe mint nesse sítio. Nesta página note é Order: tea, e a linha lê-se true / Order: mint.
O mapa guardava, esta página procura
A página do mapa fechou em lida / mint / 2. Isso era armazenamento. Aqui não se guarda um convidado. Procura-se dentro de uma cadeia. Uma procura falhada devolve false ou null e não lança um erro.
O padrão já está lá dentro
Como o padrão está dentro de mint tea, /tea/.test("mint tea") dá true. lemon não o tem, por isso /tea/.test("lemon") dá false. A bandeira i ignora maiúsculas e minúsculas, logo /tea/i casa com Tea.
console.log(/tea/.test("mint tea"));
console.log(/tea/.test("lemon"));
O registo mostra true e depois false. Um ponto corresponde a um só caráter que não seja quebra de linha, por isso /t.a/ também casa com tea. Um ponto a sério escreve-se com barra invertida e ponto: .
Pedir a cadeia inteira
^ é o início e $ é o fim. /^tea$/ aceita tea e recusa mint tea. Sem essas marcas, /tea/ ainda acerta quando tea vai no meio de uma nota mais longa.
console.log(/^tea$/.test("tea"));
console.log(/^tea$/.test("mint tea"));
O registo é true e depois false. mint tea traz as letras, mas não é só tea.
Cada cópia, depois uma cadeia nova
Com a bandeira g, match devolve cada cópia. replace com g troca cada cópia e devolve uma cadeia nova. note original fica até atribuires o resultado.
const note = "tea and tea";
console.log(note.match(/tea/g));
console.log(note.replace(/tea/g, "mint"));
console.log(note);
O registo de match é um array de duas cadeias tea. O de replace é mint and mint. O terceiro continua tea and tea, porque replace não editou note. Sem g só muda o primeiro tea. Se nada casar, match devolve null, não um array vazio.
A forma da resposta escolhe o método
Escolhe o método pela forma da resposta que queres.
📊 O que cada método devolve
| Método | Forma da resposta | Nesta nota |
|---|---|---|
/tea/.test(note) |
true ou false | true para Order: tea |
note.match(/tea/) |
um array de um acerto, ou null | a palavra tea e o lugar |
note.match(/tea/g) |
cada cópia, ou null | duas cópias em tea and tea |
note.replace(/tea/, "mint") |
uma cadeia nova | Order: mint |
test é sim ou não. match entrega os pedaços. replace entrega o texto reescrito. Atribui esse texto se o quiseres guardar.
A página escreve os dois resultados
A página testa Order: tea, troca a bebida e escreve os dois resultados.
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
const note = "Order: tea";
const found = /tea/.test(note);
const next = note.replace(/tea/, "mint");
document.querySelector("#line").textContent = found + " / " + next;
</script>
</body>
</html>
A linha lê-se true / Order: mint. O próprio note continua Order: tea. lida / mint / 2 era a página do mapa.
Cinco passos curtos
- Testa mint tea com /tea/. O resultado é true.
- Testa lemon com /tea/. O resultado é false.
- Testa mint tea com /^tea$/. O resultado é false.
- Casa tea and tea com /tea/g. O comprimento do array é 2.
- Lê a página. A linha é true / Order: mint.
Enganos e o que fica
Sem ^ e sem $ um padrão casa com um pedaço, não com a nota inteira. replace não edita o original.
- Não leias null.length quando match não encontrou nada
- Não esperes que replace mude note no lugar
- Não ponhas g numa expressão que reutilizes com test, porque ela lembra onde parou
- Escreve um ponto a sério como barra invertida e ponto
- Não leias a linha como lida / mint / 2
Fica com isto
- test responde true ou false
- /^tea$/ aceita só a cadeia inteira tea
- match com g lista cada cópia ou devolve null
- replace devolve uma cadeia nova
- a linha da página é true / Order: mint
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo