Jak usunąć początkowe i końcowe białe spacje z danego ciągu html?

178

Mam następujący ciąg HTML. Jaki byłby przykładowy kod w JavaScript, aby usunąć początkowe i końcowe białe spacje z tego ciągu?

<p>&nbsp;&nbsp;</p>
<div>&nbsp;</div>
Trimming using JavaScript<br />
<br />
<br />
<br />
all leading and trailing white spaces
<p>&nbsp;&nbsp;</p>
<div>&nbsp;</div>
Sunil
źródło
sprawdź to
musefan
Jaki jest twój prawdziwy problem? Czy chcesz usunąć spacje przed wstawieniem węzłów do dokumentu?
Rob W
Chcę usunąć wszystkie wiodące białe spacje, a także wszystkie końcowe białe spacje. Bardzo mi się podoba metoda Trim w C #, z tym wyjątkiem, że usuwa nawet białe spacje.
Sunil,
Tak więc w moim przykładzie po przycięciu w końcu powinienem otrzymać: Przycinanie za pomocą JavaScript <br /> <br /> <br /> <br /> wszystkie początkowe i końcowe białe spacje
Sunil
@Sunil Nie wiem, czy kiedykolwiek to rozwiązałeś, ale możesz wypróbować jedno z tych rozwiązań: stackoverflow.com/questions/16708158/…
Chris Baker

Odpowiedzi:

245

Zobacz metodę String trim()- https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/Trim

var myString = '  bunch    of <br> string data with<p>trailing</p> and leading space   ';
myString = myString.trim();
// or myString = String.trim(myString);

Edytować

Jak zauważono w innych komentarzach, możliwe jest użycie podejścia regex. trimMetoda jest skuteczne tylko aliasem regex:

if(!String.prototype.trim) {  
  String.prototype.trim = function () {  
    return this.replace(/^\s+|\s+$/g,'');  
  };  
} 

... to wprowadzi metodę do natywnego prototypu dla tych przeglądarek, które wciąż pływają w płytkim końcu basenu.

Chris Baker
źródło
3
Wolałbym sposób wyrażenia regularnego, ponieważ nie jest obsługiwany we wszystkich przeglądarkach ( kaszel kaszel IE <9).
PeeHaa
2
Trim metoda nie spowoduje przycięcia białych spacji, ale tylko spacje. Więc to nie jest to, czego szukam.
Sunil,
8
Nie jestem pewien, co myślisz o „białych spacjach”, ale przycinanie usunie ogólnie białe znaki (znak nowej linii, spacja, tabulator itp.), A nie tylko znak spacji.
bsa
2
@bsa Zrozumiałem, że ma na myśli „białą przestrzeń” w sensie wizualnym, np. „wizualnie puste obszary w wynikach renderowania HTML”, a następnie dodał w komentarzu powyżej „z wyjątkiem nowych linii spowodowanych brznacznikami”.
Chris Baker,
2
dlaczego nie ma znacznika wyboru przy odpowiedzi z 170 głosami za? TAK czasami mnie dezorientuje.
tcoulson
63
var str = "  my awesome string   "
str.trim();    

w starszych przeglądarkach użyj wyrażenia regularnego

str = str.replace(/^[ ]+|[ ]+$/g,'')
//str = "my awesome string" 
Jhankar Mahbub
źródło
2
„[]” to dokładnie to samo, co „”. Grupa znaków składająca się z dokładnie jednego znaku to… cóż… dokładnie jeden znak.
Flimzy
2
@Flimzy: Tak, bardziej sensowne byłoby pisanie [\t\n\ ]lub po prostu \szamiast tego [ ]nie ma sensu.
erik
11
string.replace(/^\s+|\s+$/g, "");
Sandeep Manne
źródło
Przeczytaj pytanie, &nbsp;jest używany zamiast zwykłej białej spacji. Poza tym spacja jest zawarta w tagu.
Rob W,
6

Jeśli pracujesz z ciągiem wielowierszowym, takim jak plik kodu:

<html>
    <title>test</title>
    <body>
        <h1>test</h1>
    </body>
</html>

I chcę zamienić wszystkie wiodące linie, aby uzyskać taki wynik:

<html>
<title>test</title>
<body>
<h1>test</h1>
</body>
</html>

Musisz dodać multilineflagę do swojego wyrażenia regularnego ^i $dopasować wiersz po wierszu:

string.replace(/^\s+|\s+$/gm, '');

Odpowiedni cytat z dokumentów :

Flaga „m” wskazuje, że wielowierszowy ciąg wejściowy powinien być traktowany jako wiele wierszy. Na przykład, jeśli zostanie użyte "m", "^" i "$" zmienią się z dopasowania tylko na początku lub na końcu całego ciągu do początku lub końca dowolnego wiersza w ciągu.

Jaime Gómez
źródło
4

Wiem, że to bardzo stare pytanie, ale nadal nie ma na nie zaakceptowanej odpowiedzi. Widzę, że chcesz usunąć następujące elementy: tagi html, które są „puste” i spacje oparte na łańcuchu html.

Na podstawie Twojego komentarza wymyśliłem rozwiązanie dla szukanego wyniku:

Trimming using JavaScript<br /><br /><br /><br />all leading and trailing white spaces 

var str = "<p>&nbsp;&nbsp;</p><div>&nbsp;</div>Trimming using JavaScript<br /><br /><br /><br />all leading and trailing white spaces<p>&nbsp;&nbsp;</p><div>&nbsp;</div>";
console.log(str.trim().replace(/&nbsp;/g, '').replace(/<[^\/>][^>]*><\/[^>]+>/g, ""));

.trim() usuwa początkowe i końcowe spacje

.replace(/&nbsp;/g, '') usuwa &nbsp;

.replace(/<[^\/>][^>]*><\/[^>]+>/g, "")); usuwa puste tagi

Anthony
źródło
3
var trim = your_string.replace(/^\s+|\s+$/g, '');
SenorAmor
źródło
1
Czy usunie spacje, takie jak <br /> lub <p> & nbsp; & nbsp; </p> <div> & nbsp; </div>? Ograniczenie prostych przestrzeni nie stanowi problemu. To usunięcie białych znaków, którego szukam.
Sunil
czy usunie spacje
user2086641
3

01). Jeśli chcesz usunąć tylko początkowe i końcowe białe znaki, użyj tego:

var address = "  No.255 Colombo  "
address.replace(/^[ ]+|[ ]+$/g,'');

zwróci to ciąg „No.255 Colombo”

02). Jeśli chcesz usunąć całą białą przestrzeń, użyj tego:

var address = "  No.255 Colombo  "
address.replace(/\s/g,"");

zwróci to ciąg „No.255Colombo”

Chamila Maddumage
źródło