Dada uma string como:
"O cachorro tem uma cauda longa e é VERMELHO!"
Que tipo de magia jQuery ou JavaScript pode ser usada para manter espaços em apenas um espaço no máximo?
Objetivo:
"O cachorro tem uma cauda longa e é VERMELHO!"
Dado que você também quer cobrir abas, novas linhas, etc, basta replace \s\s+
por ' '
:
string = string.replace(/\s\s+/g, ' ');
Se você realmente quiser cobrir apenas espaços (e, portanto, não guias, novas linhas, etc.), faça isso:
string = string.replace(/ +/g, ' ');
Desde que você parece estar interessado em desempenho, eu perfilei estes com Firebug. Aqui estão os resultados que recebi:
str.replace( / +/g, ' ' ) -> 790ms str.replace( / +/g, ' ' ) -> 380ms str.replace( / {2,}/g, ' ' ) -> 470ms str.replace( /\s\s+/g, ' ' ) -> 390ms str.replace( / +(?= )/g, ' ') -> 3250ms
Isto está no Firefox, executando 100k substituições de strings.
Encorajo-o a fazer seus próprios testes de perfil com o firebug, se você acha que o desempenho é um problema. Os humanos são notoriamente ruins em prever onde estão os gargalos em seus programas.
(Além disso, observe que a barra de ferramentas do desenvolvedor do IE 8 também possui um profiler embutido – pode valer a pena verificar como é o desempenho no IE.)
var str = "The dog has a long tail, and it is RED!"; str = str.replace(/ {2,}/g,' ');
EDIT: Se você deseja replace todos os tipos de caracteres em branco, a maneira mais eficiente seria assim:
str = str.replace(/\s{2,}/g,' ');
Esta é uma solução, embora tenha como alvo todos os caracteres de espaço:
"The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ') "The dog has a long tail, and it is RED!"
Edit : Isto é provavelmente melhor, pois tem como alvo um espaço seguido por um ou mais espaços:
"The dog has a long tail, and it is RED!".replace(/ +/g, ' ') "The dog has a long tail, and it is RED!"
Método alternativo:
"The dog has a long tail, and it is RED!".replace(/ {2,}/g, ' ') "The dog has a long tail, and it is RED!"
Eu não usei /\s+/
por si só, já que ele substitui espaços que abrangem 1 caractere várias vezes e pode ser menos eficiente, já que ele segmenta mais do que o necessário.
Eu não testei profundamente nada disso, por isso lmk se houver bugs.
Além disso, se você for fazer uma substituição de string, lembre-se de reatribuir a variável / propriedade ao seu próprio substituto, por exemplo:
var string = 'foo' string = string.replace('foo', '')
Usando jQuery.prototype.text:
var el = $('span:eq(0)'); el.text( el.text().replace(/\d+/, '') )
Eu tenho esse método, eu chamo de método Derp por falta de um nome melhor.
while (str.indexOf(" ") !== -1) { str = str.replace(/ /g, " "); }
Executá-lo no JSPerf dá alguns resultados surpreendentes.
Mais robusto:
function trim (palavra) { word = word.replace (/ [^ \ x21- \ x7E] + / g, ''); // altera os caracteres não imprimíveis para espaços return word.replace (/ ^ \ s + | \ s + $ / g, ''); // remove espaços iniciais / finais }
Um método mais robusto: isso também remove os espaços inicial e final, se existirem. Por exemplo:
// NOTE the possible initial and trailing spaces var str = " The dog has a long tail, and it is RED! " str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, ""); // str -> "The dog has a long tail, and it is RED !"
Seu exemplo não tem esses espaços, mas eles também são um cenário muito comum, e a resposta aceita foi apenas apará-los em espaços simples, como: “O … VERMELHO!”, Que não é o que você normalmente precisará.
Eu sugiro
string = string.replace(/ +/g," ");
por apenas espaços
OU
string = string.replace(/(\s)+/g,"$1");
para transformar vários retornos em um único retorno também.
Aqui está uma solução alternativa, se você não quiser usar replace (replace espaços em uma seqüência de caracteres sem usar o javascript de substituição)
var str="The dog has a long tail, and it is RED!"; var rule=/\s{1,}/g; str = str.split(rule).join(" "); document.write(str);
Eu sei que estou atrasado para a festa, mas descobri uma boa solução.
Aqui está:
var myStr = myStr.replace(/[ ][ ]*/g, ' ');
Resposta descriptografada abrangente para iniciantes e outros.
Isto é para todos os manequins como eu, que testam os scripts escritos por alguns de vocês que não funcionam.
Os 3 exemplos seguintes são os passos que tomei para remover caracteres especiais E espaços extras nos 3 sites seguintes (todos funcionam perfeitamente) {1. EtaVisa.com 2. EtaStatus.com 3. Tikun.com} então eu sei que estes funcionam perfeitamente.
Nós acorrentamos estes juntos com mais de 50 de cada vez e sem problemas.
// Isso removeu caracteres especiais + 0-9 e permite apenas letras (maiúsculas e minúsculas)
function NoDoublesPls1() { var str=document.getElementById("NoDoubles1"); var regex=/[^az]/gi; str.value=str.value.replace(regex ,""); }
// Isso removeu caracteres especiais e permite apenas letras (maiúsculas e minúsculas) e 0-9 E espaços
function NoDoublesPls2() { var str=document.getElementById("NoDoubles2"); var regex=/[^az 0-9]/gi; str.value=str.value.replace(regex ,""); }
// Isso removeu caracteres especiais e permite apenas letras (maiúsculas e minúsculas) e 0-9 E espaços // O .replace (/ \ s \ s + / g, “”) no final remove espaços excessivos // quando eu usou aspas simples, não funcionou.
function NoDoublesPls3() { var str=document.getElementById("NoDoubles3"); var regex=/[^az 0-9]/gi; str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " "); }
:: NEXT :: Salve # 3 como a .js
// Liguei para o meu NoDoubles.js
:: NEXT :: Inclua seu JS em sua página
Inclua isso em seu campo de formulário: como
Para que fique assim
Isso removerá caracteres especiais, permitirá espaços únicos e removerá espaços extras.
Também uma possibilidade:
str.replace( /\s+/g, ' ' )
Jquery tem a function trim () que basicamente transforma algo como “FOo Bar” em “FOo Bar”.
var string = " My String with Multiple lines "; string.trim(); // output "My String with Multiple lines"
É muito mais útil porque remove automaticamente os espaços vazios no início e no final da cadeia de caracteres. Não é necessário regex.
var myregexp = new RegExp(/ {2,}/g); str = str.replace(myregexp,' ');
var string = "The dog has a long tail, and it is RED!"; var replaced = string.replace(/ +/g, " ");
Ou se você também quiser replace as guias:
var replaced = string.replace(/\s+/g, " ");
Podemos usar o seguinte regex explicado com a ajuda do comando do sistema sed. O regex semelhante pode ser usado em outras linguagens e plataformas.
Adicione o texto em algum arquivo, diga teste
manjeet-laptop:Desktop manjeet$ cat test "The dog has a long tail, and it is RED!"
Podemos usar o seguinte regex para replace todos os espaços em branco por espaço único
manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test "The dog has a long tail, and it is RED!"
Espero que isso sirva ao propósito
Tente isso para replace vários espaços por um único espaço.
Leia mais @ Substituindo vários espaços por espaço único
var text = `xxx df dfvdfv df dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');
resultado:
"xxx df dfvdfv df dfv"