Instruções
Crie um sandbox de expressões regulares
Para este laboratório, você começa com o CSS e o HTML já escritos para você. Você usará JavaScript para habilitar a sandbox de regex a fim de testar uma expressão regular contra uma string e destacar os resultados.
Objetivo: Cumprir as user stories abaixo e fazer todos os testes passarem para completar o laboratório.
Histórias de Usuário:
1. Você deve acessar os elementos
#pattern, #test-string, #test-btn e #result e salvá-los nas variáveis regexPattern, stringToTest, testButton e testResult, respectivamente.
1. Você deve acessar as caixas de seleção de flag #i e #g e salvá-las nas variáveis caseInsensitiveFlag e globalFlag, respectivamente.
1. Você deve ter uma função chamada getFlags que retorna uma string contendo as flags das caixas de seleção de flags marcadas, ou uma string vazia se nenhuma delas estiver marcada.
1. Quando você clicar no botão testButton, se o padrão regex corresponder à string de teste, o texto correspondente deve ser destacado. Para destacar as correspondências, substitua cada correspondência pelo mesmo texto envolvido por um elemento span com a classe highlight. Observe que o CSS para isso já foi adicionado para você.
1. Quando houver uma correspondência, o texto correspondente deve ser exibido dentro de #result. Em caso de múltiplas correspondências, cada texto correspondente deve ser separado do próximo por uma vírgula e um espaço.
1. Quando não houver correspondência, o texto no match deve ser exibido dentro de #result.
O que fazer:
Testes:
- Você deve acessar o elemento `#pattern` e salvá-lo na variável `regexPattern`.
- Você deve acessar o elemento `#test-string` e salvá-lo na variável `stringToTest`.
- Você deve acessar o elemento `#test-btn` e salvá-lo na variável `testButton`.
- Você deve acessar o elemento `#result` e salvá-lo na variável `testResult`.
- Você deve acessar a caixa de seleção da flag `#i` e salvá-la em `caseInsensitiveFlag`.
- Você deve acessar a caixa de seleção da flag `#g` e salvá-la na variável `globalFlag`.
- Você deve ter uma função `getFlags`.
- A função `getFlags` deve retornar `"i"` se a caixa de seleção `#i` estiver marcada.
- A função `getFlags` deve retornar `"g"` se a caixa de seleção `#g` estiver marcada.
- A função `getFlags` deve retornar `"ig"` ou `"gi"` se ambas as caixas de seleção estiverem marcadas.
- A função `getFlags` deve retornar uma string vazia se ambas as caixas de seleção não estiverem marcadas.
- Quando o HTML interno de `stringToTest` é `Gu1n34 P1g5`, o valor de `regexPattern` é `\d+`, e nenhuma flag está marcada, `stringToTest.innerHTML` deve se tornar `Gu<span class="highlight">1</span>n34 P1g5` ao clicar no botão `testButton`.
- Quando o HTML interno de `stringToTest` é `Gu1n34 P1g5`, o valor de `regexPattern` é `\d+`, e a flag global está marcada, `stringToTest.innerHTML` deve se tornar `Gu<span class="highlight">1</span>n<span class="highlight">34</span> P<span class="highlight">1</span>g<span class="highlight">5</span>` ao clicar no botão `testButton`.
- Quando o HTML interno de `stringToTest` é `Gu1n34 P1g5`, o valor de `regexPattern` é `G`, e ambas as flags global e case insensitive estão marcadas, `stringToTest.innerHTML` deve se tornar `<span class="highlight">G</span>u1n34 P1<span class="highlight">g</span>5` ao clicar no botão `testButton`.
- Quando você clicar no botão `testButton`, se o padrão regex corresponder à string de teste, o texto correspondente deve ser envolvido por um elemento `span` com a classe `highlight`.
- Quando não houver correspondência, a string de teste não deve ser modificada.
- Quando o HTML interno de `stringToTest` é `Gu1n34 P1g5`, o valor de `regexPattern` é `\d+`, e nenhuma flag está marcada, o texto interno de `#result` deve se tornar `1` ao clicar no botão `testButton`.
- Quando o HTML interno de `stringToTest` é `Gu1n34 P1g5`, o valor de `regexPattern` é `\d+`, e a flag global está marcada, o texto interno de `#result` deve se tornar `1, 34, 1, 5` ao clicar no botão `testButton`.
- Quando houver uma correspondência, o texto correspondente deve ser exibido dentro de `#result`.
- Quando não houver correspondência, o texto `no match` deve ser exibido dentro de `#result`.
Preview