вопросы по JavaScript - string.replace () - PullRequest
0 голосов
/ 22 июня 2011

Я пытался запустить эту строку кода и удивлялся, почему она не работает.У кого-нибудь есть ответ на этот вопрос?

var string = "foo     bar";
string = string.replace(" ", "");
alert(string.length);

почему возникает проблема, что длина строки не изменяется на 6 вместо?

Ответы [ 4 ]

4 голосов
/ 22 июня 2011

Функция заменяет только один экземпляр искомой строки.

Чтобы заменить больше, вы можете сопоставить регулярное выражение:

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

, которое удаляет все символы пробела.,«\ S» соответствует пробелу, «+» означает «одно или несколько вхождений» пробельных символов, а завершающий «g» означает «сделать это для всех соответствующих последовательностей в строке».

2 голосов
/ 22 июня 2011

Поскольку в вашей строке более одного space и .replace заменяет один пробел, первый встречается.

Работает, как и ожидалось, только с одним пробелом

var string = "foo bar";
string = string.replace(" ", "");
alert(string.length);
1 голос
/ 22 июня 2011

replace, при передаче строки в качестве первого параметра, заменяет только первое вхождение этой строки.Чтобы заменить все, вам понадобится регулярное выражение:

alert("foo     bar".replace(/ /g, ""));
0 голосов
/ 22 июня 2011

Это потому, что был заменен только один пробел. Согласно спецификации JavaScript 1.5, String.replace() принимает регулярное выражение в качестве первого параметра, а поведение строковых параметров не определено. Позднее браузеры решили обрабатывать строки аналогично - но нет способа указать флаг g для строки, поэтому выполняется только одна замена. Это будет делать то, что вы хотите:

string = string.replace(/ /g, '');

Однако версия, предоставляемая Pointy (/\s+/g), может быть более эффективной. И он заменит другие типы пробелов (табуляции, переносы строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...