Mam ciągi znaków z dodatkowymi białymi spacjami, za każdym razem, gdy jest więcej niż jedna biała spacja, chciałbym, żeby była tylko jedna.
Ktoś? Próbowałem wyszukać w Google, ale nic mi nie działało.
Dzięki
Mam ciągi znaków z dodatkowymi białymi spacjami, za każdym razem, gdy jest więcej niż jedna biała spacja, chciałbym, żeby była tylko jedna.
Ktoś? Próbowałem wyszukać w Google, ale nic mi nie działało.
Dzięki
Odpowiedzi:
Coś takiego:
var s = " a b c ";
console.log(
s.replace(/\s+/g, ' ')
)
Możesz rozszerzyć String, aby zaimplementować te zachowania jako metody, jak w:
String.prototype.killWhiteSpace = function() {
return this.replace(/\s/g, '');
};
String.prototype.reduceWhiteSpace = function() {
return this.replace(/\s+/g, ' ');
};
Dzięki temu możesz teraz używać następujących eleganckich formularzy do tworzenia pożądanych ciągów:
"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra whitespaces".reduceWhiteSpace();
użycie wyrażenia regularnego z funkcją zamiany rozwiązuje problem:
string.replace(/\s/g, "")
var s = ' a b word word. word, wordword word ';
// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"
// or ES6:
s = s.split(' ').filter(n => n).join(' ');
console.log(s); // "a b word word. word, wordword word"
Dzieli ciąg znaków na białe spacje , usuwa je z tablicy wszystkie puste elementy tablicy (te, które były więcej niż pojedynczą spacją) i ponownie łączy wszystkie słowa w ciąg, z pojedynczą spacją między nimi.
Zakładam, że chcesz usunąć spacje od początku i / lub końca łańcucha (zamiast usuwać wszystkie spacje?
W takim przypadku będziesz potrzebować takiego wyrażenia regularnego:
mystring = mystring.replace(/(^\s+|\s+$)/g,' ');
Spowoduje to usunięcie wszystkich spacji z początku lub końca łańcucha. Jeśli chcesz przycinać spacje od końca, wyrażenie regularne wyglądałoby tak:
mystring = mystring.replace(/\s+$/g,' ');
Mam nadzieję, że to pomaga.
''
zamiast ' '
.
jQuery.trim () działa dobrze.
Wiem, że nie powinienem nekromancji na dany temat, ale biorąc pod uwagę szczegóły pytania, zwykle rozszerzam je na:
W tym celu używam takiego kodu (nawiasy na pierwszym wyrażeniu regularnym są tylko po to, aby uczynić kod nieco bardziej czytelnym ... wyrażenia regularne mogą być uciążliwe, chyba że się z nimi zaznajomisz):
s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');
Powodem tego jest to, że metody na obiekcie String zwracają obiekt string, na którym można wywołać inną metodę (podobnie jak jQuery i niektóre inne biblioteki). Znacznie bardziej kompaktowy sposób kodowania, jeśli chcesz wykonywać wiele metod na jednym obiekcie kolejno.
var x = „Test Test Test” .split („”) .join („”); alert (x);
Spróbuj tego.
var string = " string 1";
string = string.trim().replace(/\s+/g, ' ');
wynik będzie
string 1
To, co się tutaj wydarzyło, polega na tym, że najpierw przycina przestrzenie zewnętrzne, trim()
a następnie przycina przestrzenie wewnętrzne za pomocą .replace(/\s+/g, ' ')
.
Jeśli chcesz ograniczyć użytkownika do podawania pustego miejsca w nazwie, po prostu stwórz instrukcję if i podaj warunek. Jak ja zrobiłem:
$j('#fragment_key').bind({
keypress: function(e){
var key = e.keyCode;
var character = String.fromCharCode(key);
if(character.match( /[' ']/)) {
alert("Blank space is not allowed in the Name");
return false;
}
}
});
Co powiesz na ten?
"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')
wyjścia "my test string with crazy stuff is cool "
Ten usuwa również wszystkie zakładki
\s
. Niepotrzebnie złożone wyrażenie regularne, równie dobrze może po prostu pisać /\s+/g
.