Dada uma string como:
"O cachorro tem uma cauda longa e é VERMELHO!"
Que tipo de magia jQuery ou JavaScript pode ser usada para manter os espaços com apenas um espaço no máximo?
Objetivo:
"O cachorro tem uma cauda longa e é VERMELHO!"
javascript
jquery
regex
Um aprendiz
fonte
fonte
str.replace(/ +(?= )/g,'');
você não está substituindo nada que não seja necessário.Respostas:
Como você também deseja abas, novas linhas etc., substitua
\s\s+
por' '
:Se você realmente deseja cobrir apenas espaços (e, portanto, não guias, novas linhas etc.), faça o seguinte:
fonte
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
. É mais rápido que o regex. Você poderia apenas fazerstring.trim().replace(/\s\s+/g, ' ');
oustring.replace(/\s\s+/g, ' ').trim();
./\s\s+/g
e/\s{2,}/g
não correspondem a caracteres de espaço em branco, a menos que haja pelo menos dois adjacentes um ao outro, por exemplo, corresponderá a \ t \ t, mas não corresponderá a um único \ t.string.replace(/\s+/g, ' ')
corresponderá a todas as seqüências de caracteres de espaço em branco único e múltiplo e será substituído por espaço único.Desde que você parece estar interessado em desempenho, eu criei o perfil deles com o firebug. Aqui estão os resultados que obtive:
Isso está no Firefox, executando 100k substituições de string.
Convido você a fazer seus próprios testes de criação de perfil com o firebug, se você acha que o desempenho é um problema. Os seres humanos são notoriamente ruins em prever onde estão os gargalos em seus programas.
(Observe também que a barra de ferramentas do desenvolvedor do IE 8 também possui um criador de perfil - pode valer a pena verificar como é o desempenho no IE.)
fonte
( / +(?= )/g, ' ');
falha no IE9, deixa espaços duplos:"Foo Bar Baz".replace(/ +(?= )/g, ' ');
->"Foo Bar Baz"
EDIT: Se você deseja substituir todos os tipos de caracteres de espaço em branco, a maneira mais eficiente seria a seguinte:
fonte
Esta é uma solução, embora tenha como alvo todos os caracteres de espaço:
Editar : provavelmente é melhor, pois tem como alvo um espaço seguido por 1 ou mais espaços:
Método alternativo:
Não usei
/\s+/
por si só, uma vez que substitui espaços que abrangem 1 caractere várias vezes e pode ser menos eficiente, pois tem como alvo mais do que o necessário.Eu não testei profundamente nenhum deles, então lmk se houver erros.
Além disso, se você for fazer uma substituição de cadeia, lembre-se de atribuir novamente a variável / propriedade à sua própria substituição, por exemplo:
Usando jQuery.prototype.text:
fonte
Eu tenho esse método, eu chamo de método Derp por falta de um nome melhor.
A execução no JSPerf fornece alguns resultados surpreendentes.
fonte
Um método mais robusto: isso também remove os espaços iniciais e finais, se existirem. Por exemplo:
Seu exemplo não tinha esses espaços, mas eles também são um cenário muito comum, e a resposta aceita foi apenas recortá-los em espaços únicos, como: "O ... VERMELHO!", Que não é o que você normalmente precisará.
fonte
Mais robusto:
fonte
Eu sugiro
apenas para espaços
OU
por transformar vários retornos em um único retorno também.
fonte
Sei que estou atrasado para a festa, mas descobri uma boa solução.
Aqui está:
fonte
Aqui está uma solução alternativa, se você não quiser usar replace (substitua espaços em uma string sem usar o javascript replace)
fonte
Resposta não criptografada abrangente para iniciantes et al.
Isso é para todos os manequins como eu que testam os scripts escritos por alguns de vocês que não funcionam.
Os três exemplos a seguir são as etapas que eu segui para remover caracteres especiais E espaços extras nos três sites a seguir (todos funcionando perfeitamente) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com}, então eu sei que elas funcionam perfeitamente.
Nós os encadeamos com mais de 50 por vez e sem problemas.
// Isso removeu caracteres especiais + 0-9 e permite apenas letras (maiúsculas e minúsculas)
// Isso remove caracteres especiais e permite apenas letras (maiúsculas e minúsculas) e espaços 0-9 AND
// Isso remove caracteres especiais e permite apenas letras (maiúsculas e minúsculas) e espaços 0-9 AND // O .replace (/ \ s \ s + / g, "") no final remove espaços excessivos // quando eu usou aspas simples, não funcionou.
:: NEXT :: Salve # 3 como
a .js
// eu chamei de NoDoubles.js:: NEXT :: Inclua seu JS em sua página
Inclua isso no campo do formulário :: such as
Para que fique assim
Isso removerá caracteres especiais, permitirá espaços únicos e removerá espaços extras.
fonte
Também uma possibilidade:
fonte
Ou se você também deseja substituir as guias:
fonte
Jquery possui a função trim () que basicamente transforma algo como "FOo Bar" em "FOo Bar".
É muito mais útil, pois remove automaticamente os espaços vazios no início e no final da string. Não é necessário regex.
fonte
é substituir não é usado, string = string.split (/ \ W + /);
fonte
fonte
Podemos usar o seguinte regex explicado com a ajuda do comando sed system. O regex semelhante pode ser usado em outros idiomas e plataformas.
Adicione o texto em algum arquivo, digamos test
Podemos usar o seguinte regex para substituir todos os espaços em branco por um único espaço
Espero que isso sirva ao propósito
fonte
Tente isso para substituir vários espaços por um único espaço.
Leia mais @ Substituindo vários espaços por espaço único
fonte
resultado:
fonte
Para obter mais controle, você pode usar o retorno de chamada de substituição para manipular o valor.
fonte
Esse script remove qualquer espaço em branco (vários espaços, guias, retornos etc.) entre palavras e acabamentos:
fonte
'toque do ponteiro do mouse' .replace (/ ^ \ s + | \ s + $ | (\ s) + / g, "$ 1") deve fazer o truque!
fonte
Sei que precisamos usar regex, mas durante uma entrevista, fui solicitado a fazer SEM USAR REGEX.
@slightlytyler me ajudou a seguir a abordagem abaixo.
fonte