Olá, pessoal! Tudo bem?
Na aula de manipulação de dados textuais, foi utilizado o Regex(?<!\w)-(?!\w)para apagar hifens soltos (ex: quarto - sala) e manter os hifens de palavras compostas (ex: two-bedroom).
À primeira vista, essa expressão parece bem confusa, mas ela usa um conceito chamado Lookaround (olhar ao redor). O Regex não apaga apenas o hífen -, ele verifica quem são os "vizinhos" desse hífen antes de agir.
A seguir está como ler esses símbolos de forma fácil:
(? ... ) -> Essa estrutura avisa que é uma regra de "olhar ao redor".
< -> Significa Lookbehind (olhar para trás). Como é uma setinha apontando para a esquerda, ele olha o que está antes do hífen. Se não tiver o <, ele olha para a frente (Lookahead).
! -> É o símbolo universal de Negação (NÃO). Se fosse um sinal de igual =, seria uma afirmação (DEVE ter).
**\w **-> Representa qualquer letra ou número (word character).
Juntando as peças, a leitura do código da aula fica assim:
(?<!\w): Olhe para trás (<) e garanta que NÃO (!) tenha uma letra/número (\w).
-: O alvo (o hífen).
(?!\w): Olhe para a frente e garanta que NÃO (!) tenha uma letra/número (\w).
Como o código usou a negação (!) dos dois lados, ele só vai apagar o hífen se ele estiver completamente isolado de letras ou números. Se ele encostar em alguma letra (formando uma palavra composta), a regra falha e o hífen é salvo!
Espero que essa decomposição ajude a deixar a leitura de Expressões Regulares mais clara para vocês!
Bons estudos!