6
respostas

É possível simplificar o código da professora?

Depois de assistir as aulas fui tentar realizar o RegEx de cabeça e consegui selecionar tudo o que eu precisava com o seguinte código:

const regex = /\[([^\]]*)\]\(([^\)]*)\)/gm

Ou seja, selecionei tudo que estava dentro de colchetes:

/\[([^\]]*)\]

E depois, exatamente da mesma forma, selecionei tudo que estava dentro de parênteses:

\(([^\)]*)\)

Minha lógica era: se funciona para um, também deve funcionar para outro. Minha dúvida é: existe algum motivo especial para a professora ter utilizado um código mais complexo na aula ou foi puramente para exemplificar que existiam outras sintaxes em regex? Ou existem outras coisas dentro de parênteses que não serão link neste MD e por isso o código precisa ser mais especificado?

6 respostas

Nicolas, boa noite.

Eu acredito que ela está forçando o padrão de escrita de uma URL, evitando assim pegar trechos do texto que não são URL.

No seu último exemplo \(([^\)]*)\), se jogarmos no texto que a professora utiliza, você verá que a expressão regular considerou o trecho "veja [Implementation notes](https://developer.mozilla.org/pt-BR/docs/Web/API/File#implementation_notes", que não é uma URL.

Henrique Ferraz Derrico, a professora mesmo seleciona esse link, mesmo que ela tenha colocado que não era pra serem considerados hashtags no regex dela. Não entendi por que você não considerou este link como uma URL. Se puder elaborar...

O trecho de texto que o seu regex ta pegando considera a palavra veja, que vem antes dos colchetes.

"veja [Implementation notes](https://developer.mozilla.org/pt-BR/docs/Web/API/File#implementation_notes"

A professora seleciona só que vem a partir dos colchetes

"[Implementation notes](https://developer.mozilla.org/pt-BR/docs/Web/API/File#implementation_notes"

Henrique, tem algo errado com o seu teste, acho que você deve ter copiado só parte do meu regex. Aqui a pesquisa retorna perfeitamente os links.

Talvez você tenha achado que os fragmentos de regex que eu enviei após a const regex eram pra funcionar de forma independente, mas na verdade o código só funcionar com a const regex inteira, eu separei apenas para facilitar o entendimento de o que significava o que dentro do regex.

const regex = /\[([^\]]*)\]\(([^\)]*)\)/gm

Este regex que eu escrevi tem o poder de identificar sempre que existirem colchetes do lado de parênteses, e considera tudo que está dentro de colchetes como título do link e tudo que está dentro de parênteses como link, assim, mesmo que abramos um arquivo .md que tenha links começando com www ao invés de https o código vai funcionar igual.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Foi exatamente isso que eu pensei kkkkkk, desculpa a confusão!

ah, sim, perfeito, sem problemas ;)