Как я могу удалить символ из строки, используя 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.

В качестве альтернативы вы можете использовать регулярное выражение с глобальным флагом (как предложено Эриком Реппеном & Сагар Гала, ниже), чтобы заменить все вхождения на

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

Ответ 2

Простым функциональным способом javascript будет

mystring = mystring.split('/r').join('/')

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

Ответ 3

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

str.slice(0, 4) + str.slice(5, str.length))

Ответ 4

Ваш первый func почти прав. Просто удалите флаг "g", который означает "глобальный" (отредактируйте) и дайте ему некоторый контекст для определения второго "r".

Изменить: не видел, что это был второй "r", прежде чем добавить "/". Требуется \/для выхода из '/' при использовании аргумента regEx. Спасибо за upvotes, но я ошибся, поэтому я исправлю и добавлю больше деталей для людей, заинтересованных лучше понять основы regEx, но это сработает:

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

Теперь для чрезмерного объяснения:

При чтении/записи шаблона regEx думайте в терминах: < a символ или набор charcters > а затем символ или набор символов > затем следует <...

В regEx < a символ или набор charcters > может быть по одному:

/each char in this pattern/

Итак, прочитайте как e, затем a, а затем c и т.д.

Или одиночный символ < a или набор символов > могут быть символами, описанными классом символов:

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

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

И вот так:

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

Как ни странно, как начинает выглядеть regEx, все это разбивается на ряд вещей (потенциально многосимвольных вещей), следующих друг за другом последовательно. Это был основной момент, но мне потребовалось некоторое время, чтобы пройти мимо, поэтому я переборщил, объяснив это здесь, так как я думаю, что это поможет OP и другим новым пользователям regEx понять, что происходит. Ключ к чтению/записи regEx разбивает его на эти части.

Ответ 5

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

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

Ответ 6

return this.substr(0, index) + char + this.substr(index + char.length);

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

Ответ 7

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

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

mystring.replaceAt(4, 1);

Я бы назвал его removeAt.:)

Ответ 8

Если это всегда 4-й char в вашей строке, вы можете попробовать:

yourString.replace(/^(.{4})(r)/, function($1, $2) { return $2; });

Ответ 9

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

Это происходит потому, что, когда char равно "", char.length равно 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 ^
}

Ответ 10

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

  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');

enter image description here

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

a.replaceAt(4,'');

enter image description here

Ответ 11

Мне не нравится использование функции replace для удаления символов из строки. Это не логично, чтобы сделать это так. Обычно я программирую на С# (Sharp), и всякий раз, когда я хочу удалить символы из строки, я использую метод Remove класса String, но не Replace метод, хотя он существует, потому что когда я собираюсь удалить, я удаляю, нет. Это логично!

В Javascript нет функции удаления для строки, но есть функция substr. Вы можете использовать функцию substr один или два раза для удаления символов из строки. Вы можете сделать следующую функцию для удаления символов в начале индекса до конца строки, так же как метод С# сначала перегружает String.Remove(int startIndex):

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

и/или вы также можете сделать следующую функцию для удаления символов в начале индекса и подсчета, так же как второй метод перегрузки С# String.Remove(int startIndex, int count):

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

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

Пример:

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

Выход: crt/2002_2

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

Ответ 12

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

public static cut(value: string, cutStart: number, cutEnd: number): string {
    return value.substring(0, cutStart) + value.substring(cutEnd + 1, value.length);
}

Ответ 13

Самый короткий путь - использовать сплайс

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

Ответ 14

Вы можете использовать это: if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)

Объяснение:

  1. if ( str[4] === 'r' )
    Проверьте, является ли 5-й символ 'r'

  2. str.slice(0, 4)
    Нарезать строку, чтобы получить все до 'r'

  3. + str.slice(5)
    Добавьте остальную часть строки.

Сокращенный: s=s[4]=='r'?s.slice(0,4)+s.slice(5):s [37 байт!]

DEMO:

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)

Ответ 15

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

/**
 * 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) {
    return str.substring(0, index - 1) + str.substring(index, str.length)
}

Ответ 16

Это улучшение простого ответа (опустить длину)

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

Ответ 17

В С# (Sharp) вы можете сделать пустой символ как '\ 0'. Возможно, вы можете это сделать:

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

Поиск в google или серфинге в режиме interent и проверка того, позволяет ли javascript создавать пустые символы, например С#. Если да, то узнайте, как это сделать, и, возможно, функция replaceAt будет работать наконец, и вы достигнете того, что хотите!

Наконец, символ 'r' будет удален!