Як видалити провідні та кінцеві пробіли з заданого HTML-рядка?


178

У мене є такий HTML-рядок. Яким буде зразок коду в JavaScript, щоб видалити провідні та кінцеві пробіли з цього рядка?

<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>


Яка ваша реальна проблема? Ви хочете видалити пробіл перед тим, як вставити вузли в документ?
Роб Ш

Я хочу видалити всі провідні білі проміжки, а також усі пробіли білого кольору. Мені дуже подобається метод Trim в C # за винятком того, що він видаляє навіть білі проміжки.
Суніл

Тож у моєму прикладі я нарешті повинен отримати наступне після обрізки: Обрізка за допомогою JavaScript <br /> <br /> <br /> <br /> всіх провідних та задніх пробілів
Sunil

@Sunil Я не знаю, чи ви коли-небудь вирішували це, але ви можете спробувати одне з таких рішень: stackoverflow.com/questions/16708158/…
Кріс Бейкер

Відповіді:


245

Дивіться метод 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);

Редагувати

Як зазначається в інших коментарях, можна використовувати підхід регулярного вираження. trimМетод ефективний тільки псевдонім для регулярних виразів:

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

... це введе метод у нативний прототип для тих браузерів, які все ще плавають на мілководді кінця басейну.


3
Я б вважав за краще регекс-спосіб, тому що він підтримується не в усіх браузерах ( кашель IE <9).
PeeHaa

2
Метод обрізки не обріже пробіли, а лише пробіли. Так що це не те, що я шукаю.
Суніл

8
Я не впевнений, що ви думаєте про "білі пробіли", але обробка видалить пробіли взагалі (нова лінія, пробіл, вкладка тощо), а не лише пробіл.
bsa

2
@bsa Я зрозумів, що він означає "пробіл" у візуальному розумінні, як у "візуально порожніх областях в результатах надання HTML", а потім додав у коментарі вище "за винятком нових рядків, викликаних brтегами".
Кріс Бейкер

2
чому не існує галочки на відповідь із 170 оновленими? Так мене іноді бентежить.
tcoulson

63
var str = "  my awesome string   "
str.trim();    

для старих браузерів використовуйте регулярний вираз

str = str.replace(/^[ ]+|[ ]+$/g,'')
//str = "my awesome string" 

2
"[]" точно такий же, як "". Групування персонажів з точно одного символу - це ... ну ... рівно один символ.
Flimzy

2
@Flimzy: Так, було б більше сенсу писати [\t\n\ ]або просто \sзамість цього [ ]немає сенсу.
Ерік

11
string.replace(/^\s+|\s+$/g, "");

Прочитайте питання, &nbsp;використовується замість звичайного пробілу. Крім цього, пробіл міститься в тезі.
Rob W

6

Якщо ви працюєте з багаторядковим рядком, як файл коду:

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

І хочете замінити всі провідні рядки, щоб отримати цей результат:

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

Ви повинні додати multilineпрапор до свого регулярного вираження ^та $відповідати рядок за рядком:

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

Відповідна цитата з документів :

Прапор "m" вказує на те, що багаторядковий вхідний рядок слід розглядати як кілька рядків. Наприклад, якщо використовується "m", "^" і "$" змінюються від відповідності лише на початку або в кінці всього рядка до початку або кінця будь-якого рядка в рядку.


4

Я знаю, що це дуже давнє запитання, але на це все ще немає прийнятої відповіді. Я бачу, що ви хочете видалити наступні: теги html, які є "порожніми" та пробілами на основі HTML-рядка.

Я придумав рішення, засноване на вашому коментарі до результатів, які ви шукаєте:

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() видаляє простір провідних та задніх пробілів

.replace(/&nbsp;/g, '') видаляє &nbsp;

.replace(/<[^\/>][^>]*><\/[^>]+>/g, "")); видаляє порожні теги


3
var trim = your_string.replace(/^\s+|\s+$/g, '');

1
Чи видалить пробіли на зразок <br /> або <p> & nbsp; & nbsp; </p> <div> & nbsp; </div>? Обрізання простих просторів не є проблемою. Це біле простір, яке я після.
Суніл

чи видалить пробіл
user2086641

3

01). Якщо вам потрібно видалити лише пробіли та пробіли, використовуйте це:

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

це поверне рядок "No.255 Colombo"

02). Якщо вам потрібно видалити весь пробіл, скористайтеся цим:

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

це поверне рядок "No.255Colombo"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.