Как удалить символ из строки с помощью Javascript?

Я так близок к тому, чтобы понять это, но это просто 'не правильно. Все, что я хочу сделать, это удалить символ r из строки. Проблема в том, что в строке есть более одного экземпляра символа r. Однако это всегда символ с индексом 4 (то есть 5-й символ).

пример строки: crt/r2002_2

Что я хочу: crt/2002_2

Эта функция замены удаляет оба r

mystring.replace(/r/g, '')

Производит: ct/2002_2

Я попробовал эту функцию:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')

Она работает, только если я заменяю его другим символом. Просто удалить его не получится.

Есть какие-нибудь мысли?

Комментарии к вопросу (1)
var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

заменит /r на /, используя String.prototype.replace.

В качестве альтернативы вы можете использовать regex с глобальным флагом (как предложено Erik Reppen & Sagar Gala, ниже) для замены всех вхождений на

mystring = mystring.replace(/\/r/g, '/');

EDIT: Поскольку здесь все так веселятся, а user1293504, похоже, не собирается возвращаться в ближайшее время, чтобы ответить на уточняющие вопросы, вот метод удаления N-го символа из строки:

String.prototype.removeCharAt = function (i) {
    var tmp = this.split(''); // convert to an array
    tmp.splice(i - 1 , 1); // remove 1 element from the array (adjusting for non-zero-indexed counts)
    return tmp.join(''); // reconstruct the string
}

console.log("crt/r2002_2".removeCharAt(4));

Поскольку user1293504 использовал обычный подсчет вместо подсчета с нулевым индексом, нам'нужно убрать 1 из индекса, если вы хотите использовать это для повторения работы charAt, не вычитайте 1 из индекса в 3-й строке и используйте tmp.splice(i, 1) вместо этого.

Комментарии (1)

Простой функциональный JavaScript будут

mystring совсем = mystring совсем.сплит('/Р').присоединяйтесь('/')

простой, быстрый, он заменит во всем мире и нет необходимости в функции или прототипы

Комментарии (6)

Всегда есть строковые функции, если вы знаете, что всегда будете удалять четвертый символ:

str.slice(0, 4) + str.slice(5, str.length))
Комментарии (2)

Ваша первая функция-это почти правильно. Просто удалить 'т' флаг, который выступает за 'глобальные' ("редактировать") и дать некоторый контекст, чтобы определить второй 'Р'.

Редактировать: я'т см. Это была вторая 'Р' прежде чем так добавил '/'. Должен \/ бежать '/' при использовании регулярных выражений арг. Спасибо за голоса, но я был неправ поэтому я'МР исправить и добавить более подробно для тех, кто заинтересован в понимании основ регулярных выражений лучше, но это будет работать:

mystring.replace(/\/r/, '/')

Теперь за чрезмерную объяснение:

При чтении/записи регулярного выражения паттерн думать в терминах: &ЛТ;символ или набор герои&ГТ; за &ЛТ;символ или набор герои&ГТ; за &ЛТ;...

В регулярное выражение &ЛТ;символ или набор герои&ГТ; может быть одновременно:

/each char in this pattern/

Так что читается как Е, а затем в, затем с и т. д...

Или один &ЛТ;символ или набор герои&ГТ; может быть персонажей, описанные классовый характер:

/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)

Или расширили, чтобы соответствовать количество символов (но все же лучше думать как единый элемент с точки зрения последовательного узора):

/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would

/[aA]{1,3}/
//1-3 matches of 'a' or 'A'

/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class

/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)

Так котик кучка вместе:

   var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
   var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can   eat098765';

   joesStr.match(rePattern);

   //returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
   //without the 'g' after the closing '/' it would just stop at the first   match and return:
   //["aaaAAAaaEat at Joes123454321"]

И конечно, я'вэ за-разработана, но моя точка зрения была просто, что это:

/cat/

это серия из 3 элементов рисунка (вещь, затем вещь следует дело).

И так это:

/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/

Настолько, как регулярное выражение начинает выглядеть, это все ломается на ряд вещей (потенциально многосимвольный вещи) следующих друг за другом последовательно. Основная точка, но тот, который взял меня некоторое время, чтобы пройти мимо, поэтому я'вэ зашли слишком далеко, объясняя это вот как я думаю, это's один, что бы помочь op и другие новые в regex понять, что's идя дальше. Ключ к чтению/записи регулярных выражений-это разбить его на эти части.

Комментарии (0)

Для глобальной замены '/Р', этот код работал для меня.

mystring = mystring.replace(/\/r/g,'');
Комментарии (0)

Просто исправить вашу replaceAt:

String.prototype.replaceAt = function(index, charcount) {
  return this.substr(0, index) + this.substr(index + charcount);
}

mystring.replaceAt(4, 1);

Я'д называют его removeAt вместо этого. :)

Комментарии (1)
return this.substr(0, index) + char + this.substr(index + char.length);

char.length равен нулю. В этом случае необходимо добавить 1, чтобы пропустить символ.

Комментарии (7)

Это только работает, если я заменить его на другой символ. Это не просто удалить его.

Это потому, что когда голец равна я&; на", `голец.длина-это 0, так что ваш подстроки объединяются, чтобы сформировать исходную строку. Твоя попытка кода, следующее будет работать:

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + 1);
    //   this will 'replace' the character at index with char ^
}
  • [Демо][1]
Комментарии (0)

Создайте функцию, как показано ниже

  String.prototype.replaceAt = function (index, char) {
      if(char=='') {
          return this.slice(0,index)+this.substr(index+1 + char.length);
      } else {
          return this.substr(0, index) + char + this.substr(index + char.length);
      }
  }

На замену дают характер, как показано ниже

  var a="12346";
  a.replaceAt(4,'5');

и чтобы удалить символ в определенный индекс, дать второй параметр как пустая строка

a.replaceAt(4,'');

Комментарии (0)

Если это всегда 4-й Чар в yourString вы можете попробовать:

yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; });
Комментарии (0)

Если вы просто хотите, чтобы удалить один символ и Если вы знаете индекс символа, который вы хотите удалить, вы можете использовать следующую функцию:

/**
 * Remove single character at particular index from string
 * @param {*} index index of character you want to remove
 * @param {*} str string from which character should be removed
 */
function removeCharAtIndex(index, str) {
    var maxIndex=index==0?0:index;
    return str.substring(0, maxIndex) + str.substring(index, str.length)
}
Комментарии (2)

Я не люблю использовать заменить функцию, чтобы удалить символы из строки. Это не логично чтобы сделать это. Обычно я программу на C# (Шарп), и всякий раз, когда я хочу, чтобы удалить символы из строки, я буду использовать удалить методом класса String, но не заменить способ, хотя он существует, потому что, когда я Удалить, я не удалить, не заменить. Это логично!

В JavaScript нет функции удалить строку, но есть функция substr. Вы можете использовать один или два раза функция substr, чтобы удалить символы из строки. Вы можете сделать следующую функцию, чтобы удалить символы по индексу начала до конца строки, просто как в C# метод первый перегрузки строку.Удалить(инт параметру):

function Remove(str, startIndex) {
    return str.substr(0, startIndex);
}

и/или вы также можете сделать следующую функцию, чтобы удалить символы по индексу начать и рассчитывать, как и C# метод второй перегрузки строку.Удалить(инт начальный_индекс, граф инт):

function Remove(str, startIndex, count) {
    return str.substr(0, startIndex) + str.substr(startIndex + count);
}

и затем вы можете использовать эти две функции или одна из них для ваших нужд!

Пример:

alert(Remove("crt/r2002_2", 4, 1));

Вывод: ЭЛТ/2002_2

Достижение целей, выполнив приемы с Никакой логики может вызвать путаницу в понимание кода, и ошибок в будущем, если вы делаете это много в большом проекте!

Комментарии (1)

Следующая функция работает лучше для моего случая:

public static cut(value: string, cutStart: number, cutEnd: number): string {
    return value.substring(0, cutStart) + value.substring(cutEnd + 1, value.length);
}
Комментарии (0)

Самый короткий путь будет использование соединения

var inputString = "abc";
// convert to array and remove 1 element at position 4 and save directly to the array itself
let result = inputString.split("").splice(3, 1).join();
console.log(result);
Комментарии (1)

Вы можете использовать это: если ( стр[4] === 'Р' ) НТР = НТР.срез ул.(0, 4) +.нарезать(5)

Объяснение:

  1. Если ( стр[4] === &#39;Р&#39; )<БР> Проверьте, если 5-й символ &#39;Р&#39;<БР>

  2. НТР.фрагмент(0, 4)<БР> Нарезать строку, чтобы получить все до'Р'`

  3. ул.+.нарезать(5)<БР> Добавить остальные строки.

Сокращен: с=с[4]=='Р'?С. срез(0,4)+С. нарезать(5):З` [37 байт!] <БР><БР> Демо:

в

function remove5thR (s) {
  s=s[4]=='r'?s.slice(0,4)+s.slice(5):s;
  console.log(s); // log output
}

remove5thR('crt/r2002_2')  // > 'crt/2002_2'
remove5thR('crt|r2002_2')  // > 'crt|2002_2'
remove5thR('rrrrr')        // > 'rrrr'
remove5thR('RRRRR')        // > 'RRRRR' (no change)

в

Комментарии (0)

Это улучшение simpleigh ответ (Убрать длину)

s.slice(0,4)+s.slice(5)

в

let s="crt/r2002_2";

let o= s.slice(0,4)+s.slice(5);

let delAtIdx= (s,i) => s.slice(0,i)+s.slice(i+1); // this function remove letter at index i

console.log(o);
console.log(delAtIdx(s,4));

в

Комментарии (0)

В C# (Шарп), вы можете сделать пустой символ как '\0'. Может быть, вы можете сделать это:

String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '\0')

Поиск на Google или серфинга в интернете и проверить, если JavaScript позволяет сделать пустые символы, как C# работает. Если да, то узнайте, как это сделать, и, возможно, функции replaceAt будет работать наконец-то, и вы'МР достичь того, чего вы хотите!

Наконец, что 'Р' характер будут удалены!

Комментарии (0)