Удалить строку в javascript, не оставляя пустого места? - PullRequest
2 голосов
/ 09 февраля 2012

Я видел несколько случаев такого рода вопросов, но не тот, который я ищу специально ... (Я просто надеюсь, что я не безнадежно слепой!: P)

Давайте рассмотрим этот код:

var oneString = "This is a string";
document.write(oneString.replace("is", ""));

Я бы предположил, что результат будет:

This a string.

Но вот что я получаю:

This a  string

Это все равно, что replace () думает, что второй отправленный аргумент - это "", а не "" ... Каков будет правильный способ удаления строки данной строки без лишних пробелов, плавающих в моем выводе?

Ответы [ 5 ]

3 голосов
/ 09 февраля 2012

На самом деле вы получаете "is", заменяемое пустой строкой, это пробел до и после"is", который вы заменяете, оставаясь вокруг двух оставшихся пробелов.Попробуйте;

oneString.replace("is ", "")
1 голос
/ 09 февраля 2012

Вы не включили пробелы в свой шаблон. Когда я пробую ваш код в Chrome, я получаю:

> "This is a string".replace("is","")
  "Th is a string"

Один из способов добиться того, что вы пытаетесь, - использовать вместо этого регулярное выражение:

> "This is a string".replace(/is\s/,"")
  "This a string"
1 голос
/ 09 февраля 2012

Посмотрите на оригинальную строку - "This_is_a_string" (я заменил пробелы подчеркиванием). Когда вы удаляете «is», вы не трогаете ни одно из окружающих пространств, поэтому оба выходят в итоге. Что вам нужно сделать, это oneString.replace("is","").replace(/ +/," ") - избавиться от "есть", а затем устранить любые двойные пробелы. Если вы хотите оставить несколько двойных пробелов, попробуйте вместо этого oneString.replace(" is",""), хотя у вас возникнут проблемы, если строка начинается с (например, "это безопасно?").

Наилучшим ответом может быть что-то вроде oneString.replace(/is ?/,"") to match is possibly followed by a space or oneString.replace (/? Is? /, "") Для сопоставления, возможно, окружено пробелами, и замените их всех одним пробелом.

1 голос
/ 09 февраля 2012

Вы уверены, что не получаете «This a string»?

Я думаю, вам следует заменить «is» на «», чтобы получить желаемый результат.До и после слова есть пробел.

1 голос
/ 09 февраля 2012
var aString = "This is a string";
var find = "is";    // or 'This' or 'string'
aString = aString.replace(new RegExp("(^|\\s+)" + find + "(\\s+|$)", "g"), "$1");
console.log(oneString);

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

Модификатор g должен заставить replace заменять все экземпляры, а не только первый.

Добавьте модификатор i, чтобы сделать его нечувствительным к регистру.

Если вы также хотите, чтобы это работало со строками, такими как:

"This has a comma, in it"

Измените регулярное выражениедо:

var find = "comma";
new RegExp("(^|\\s+)" + find + "(\\s+|$|,)", "g")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...