Подтвердить что ты не робот

Javascript - заменить тире (дефис) пробелом

Я искал это какое-то время, и, хотя я нашел много ответов для изменения пространства в тире (дефис), я не нашел ни одного, что будет в другом направлении.

Первоначально у меня есть:

var str = "This-is-a-news-item-";

Я пытаюсь заменить его на:

str.replace("-", ' ');

И просто отобразите результат:

alert(str);

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

Спасибо за помощь.

4b9b3361

Ответ 1

Это исправляет:

var str = "This-is-a-news-item-";
str = str.replace(/-/g, ' ');
alert(str);

В вашем коде были две проблемы:

  • Во-первых, String.replace() не изменяет сама строку, она возвращает измененную строку.
  • Во-вторых, если вы передадите строку функции replace, она заменит только первый экземпляр, с которым он сталкивается. Вот почему я передал регулярное выражение с флагом g для "global", чтобы все экземпляры были заменены.

Ответ 2

Я думаю, что проблема, с которой вы сталкиваетесь, почти такова: -

str = str.replace("-", ' ');

Вам нужно повторно назначить результат замены str, чтобы увидеть отраженное изменение.

Из ссылка на MSDN Javascript: -

Результатом метода replace является копия stringObj после указанные замены были сделаны.

Чтобы заменить все -, вам нужно будет использовать модификатор /g с параметром regex: -

str = str.replace(/-/g, ' ');

Ответ 3

replace() возвращает новую строку, а исходная строка не изменяется. Вам нужно сделать

str = str.replace(/-/g, ' ');

Ответ 4

var str = "This-is-a-news-item-";
while (str.contains("-")) {
  str = str.replace("-", ' ');
}
alert(str);

Я обнаружил, что одно использование str.replace() заменит только первый дефис, поэтому я зациклился, пока строка ввода все еще содержала дефисы и заменила их все.

http://jsfiddle.net/LGCYF/

Ответ 5

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

str = str.replace(/-/g, ' ');  // Replace all '-'  with ' '

Ответ 6

Представьте, что вы в конечном итоге получаете двойные тире и хотите заменить их одним символом, а не двойными символами замены. Вы можете просто использовать разбиение массива и фильтр массива и соединение массива.

var str = "This-is---a--news-----item----";

Затем, чтобы заменить все тире одинарными пробелами, вы можете сделать это:

var newStr = str.split('-').filter(function(item) {
  item = item ? item.replace(/-/g, ''): item
  return item;
}).join(' ');

Теперь, если строка содержит двойные тире, например, "----", массив split создаст элемент с 3 штрихами (потому что он разделен на первый тире). Итак, используя эту строку:

item = item? item.replace( / -/g, ''): item

Метод filter удаляет эти лишние черточки, поэтому элемент будет игнорироваться при итерации фильтра. Вышеприведенная строка также учитывает, является ли item уже пустым элементом, поэтому он не падает на item.replace.

Затем, когда ваше строковое объединение выполняется на отфильтрованных элементах, вы получите следующий вывод:

"This is a news item"

Теперь, если вы использовали что-то вроде knockout.js, где вы можете иметь наблюдаемые на компьютере. Вы можете создать вычисляемую наблюдаемую величину, чтобы всегда вычислять "newStr" при изменении "str", чтобы у вас всегда была версия строки без черточек, даже если вы изменили значение исходной входной строки. В основном они связаны друг с другом. Я уверен, что другие платформы JS могут делать подобные вещи.