Vyhledávání na webu

text - Jak odstranit mezery ze řetězce pomocí JavaScriptu?


Jak odstranit mezery v řetězci? Například:

Vstup:

'/var/www/site/Brand new document.docx'

Výstup:

'/var/www/site/Brandnewdocument.docx'

Odpověď č. 1

Toto?

str = str.replace(/\s/g, '');

Příklad

var str = '/var/www/site/Brand new document.docx';

document.write( str.replace(/\s/g, '') );

Aktualizace: Na základě této otázky toto:

str = str.replace(/\s+/g, '');

je lepší řešení. Produkuje stejný výsledek, ale dělá to rychleji.

Regex

\s je regulární výraz pro „mezery“ a g je vlajka „globální“, což znamená, že se shoduje se VŠEMI \s (mezerami).

Skvělé vysvětlení pro + lze najít zde.

Mimochodem, můžete obsah mezi jednoduchými uvozovkami nahradit čímkoli, co chcete, takže můžete nahradit mezery jakýmkoli jiným řetězcem.

Odpověď č. 2

NEJKRATŠÍ a NEJRYCHLEJŠÍ: str.replace(/ /g, '');


Benchmark:

Tady jsou mé výsledky - (13.07.2018) MacOs High Sierra 10.13.3 na Chrome 67.0.3396 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit):

KRÁTKÉ řetězce

Krátký řetězec podobný příkladům z otázky původního autora

Nejrychlejším řešením ve všech prohlížečích je / /g (regexp1a) - Chrome 17,7M (operací/sec), Safari 10,1M, Firefox 8,8M. Nejpomalejší pro všechny prohlížeče bylo řešení split-join. Změna na \s nebo přidání + či i k regulárnímu výrazu zpomaluje zpracování.

DLOUHÉ řetězce

Pro řetězec o přibližně 3 milionech znaků jsou výsledky:

  • regexp1a: Safari 50,14 ops/s, Firefox 18,57, Chrome 8,95
  • regexp2b: Safari 38,39, Firefox 19,45, Chrome 9,26
  • split-join: Firefox 26.41, Safari 23.10, Chrome 7.98,

Můžete to spustit na svém počítači: https://jsperf.com/remove-string-spaces/1

Odpověď č. 3

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

Dva způsoby, jak to udělat!

Odpověď č. 4

Následující odpověď @rsplak: ve skutečnosti je používání způsobu split/join rychlejší než použití regexp. Podívejte se na test výkonu

Tak

var result = text.split(' ').join('')

funguje rychleji než

var result = text.replace(/\s+/g, '')

U krátkých textů to není relevantní, ale v případech, kdy je čas důležitý, např. v textových analyzátorech, zejména při interakci s uživateli, je to důležité.

Na druhou stranu \s+ zachází s širší škálou znaků mezery. Spolu s \n a \t také odpovídá znaku \u00a0, a to je to, co se stane  , když získáváte text pomocí textDomNode.nodeValue.

Takže si myslím, že závěr zde lze formulovat následovně: pokud potřebujete pouze nahradit mezery ' ', použijte split/join. Pokud mohou být různé symboly třídy symbolů - použijte replace(/\s+/g, '')

Odpověď č. 5

snadný způsob

someString.replace(/ /g, '');
// or
someString.replace(/\s/gm, '');

Odpověď č. 6

var input = '/var/www/site/Brand new document.docx';

//remove space
input = input.replace(/\s/g, '');

//make string lower
input = input.toLowerCase();

alert(input);

Klikněte sem pro pracovní příklad

Odpověď č. 7

Bez regulárních výrazů to funguje dobře jen pro jednu shodu.

input = input.replace(' ', '');

To je rychlejší než jednoduché! Může to některým z vás v některých případech pomoci.

Související články