1
resposta

Lógica da expressão regular

Olá pessoal,

Desculpem mas não entendi a lógica da expressão regular do trecho de código abaixo. Se o meu separador é o espaço, como faz sentido agora que o separador seja qualquer carácter menos 1 ou mais espaços? Me ajudem por favor!

var campo = $(".campo-digitacao");
campo.on("input", function() {
    var conteudo = campo.val();

    var qtdPalavras = conteudo.split(/\S+/).length;
    $("#contador-palavras").text(qtdPalavras);

    var qtdCaracteres = conteudo.length;
    $("#contador-caracteres").text(qtdCaracteres);
});

Abraços,

Dayane Soares

1 resposta

Olá, Dayane.

Existem várias maneiras de fazer o mesmo código.

Talvez uma mais "normal" seria fazer uma expressão regular que quebrasse o texto nos espaços, né?

Tipo:

"lorem ipsum dolor sit amet consectetur".split(/\s/)

vai ter como resultado:

(6) ["lorem", "ipsum", "dolor", "sit", "amet", "consectetur"]

Se você pegar o .length, vai dar 6.


Se fizermos a regex com \S, ele vai quebrar em tudo o que NÃO é espaço.

"lorem ipsum dolor sit amet consectetur".split(/\S/)

o resultado vai ser:

(34) ["", "", "", "", "", " ", "", "", "", "", " ", "", "", "", "", " ", "", "", " ", "", "", "", " ", "", "", "", "", "", "", "", "", "", "", ""]

São 34 coisas que não são espaço! Totalmente errado!


Agora, se fizermos a regex pegando tudo o que não é espaço seguidamente, seria assim:

"lorem ipsum dolor sit amet consectetur".split(/\S+/)

terá como resultado

(7) ["", " ", " ", " ", " ", " ", ""]

O + pega tudo o que não espaço e junta. O .length deu 7 e aí tem que tirar 1.