Quando temos uma string que contém caracteres de espaço:
var str = ' A B C D EF ';
e queremos remover os espaços da string (queremos isso 'ABCDEF'
:).
Ambos:
str.replace(/\s/g, '')
e isto:
str.replace(/\s+/g, '')
retornará o resultado correto.
Isso significa que o +
é supérfluo nessa situação? Há uma diferença entre essas duas expressões regulares nesta situação (como em, elas poderiam de alguma forma produzir resultados diferentes)?
Atualização: comparação de desempenho - /\s+/g
é mais rápido. Veja aqui: http://jsperf.com/s-vs-s
javascript
regex
Šime Vidas
fonte
fonte
\s+
é mais rápido, porque pode substituir pedaços de espaço em branco, enquanto\s
deve substituir cada espaço em branco separadamente?Respostas:
Na primeira regex, cada caractere de espaço está sendo substituído, caractere por caractere, pela string vazia.
Na segunda regex, cada string contígua de caracteres de espaço está sendo substituída pela string vazia devido ao
+
.No entanto, assim como 0 multiplicado por qualquer outra coisa é 0, parece que os dois métodos retiram os espaços exatamente da mesma maneira.
Se você alterar a string de substituição para
'#'
, a diferença se torna muito mais clara:var str = ' A B C D EF '; console.log(str.replace(/\s/g, '#')); // ##A#B##C###D#EF# console.log(str.replace(/\s+/g, '#')); // #A#B#C#D#EF#
fonte
\s
significa "um espaço" e\s+
significa "um ou mais espaços".Mas, como você está usando o
/g
sinalizador (substitua todas as ocorrências) e substituindo pela string vazia, suas duas expressões têm o mesmo efeito.fonte
\s+
, deixando o resto intacto. Por exemplo,' foo bar '.replace(/\s+/, '')
daria a você apenas'foo bar '
editar argh HTML condensando dois espaços em umg
modificador, apenas a primeira ocorrência de um bloco de espaços em branco será substituída.Em uma situação de correspondência, o primeiro retornaria uma correspondência por espaço em branco, enquanto o segundo retornaria uma correspondência para cada grupo de espaços em branco.
O resultado é o mesmo porque você o está substituindo por uma string vazia. Se você substituí-lo por 'x', por exemplo, os resultados seriam diferentes.
str.replace(/\s/g, '')
retornará 'xxAxBxxCxxxDxEF'while
str.replace(/\s+/g, '')
retornará 'xAxBxCxDxEF'porque
\s
corresponde a cada espaço em branco, substituindo cada um por 'x', e\s+
corresponde a grupos de espaços em branco, substituindo vários espaços em branco sequenciais por um único 'x'.fonte
+
significa "um ou mais caracteres" e sem o mais significa "um caractere". No seu caso, ambos resultam na mesma saída.fonte