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.
