Я так близок к получению этого, но это просто неправильно. Все, что я хотел бы сделать, это удалить символ 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, '')
Это работает, только если я заменю его другим персонажем. Это не просто удалит это.
Какие-нибудь мысли?
javascript
string
replace
character
user1293504
источник
источник
Ответы:
заменит
/r
с/
помощьюString.prototype.replace
.В качестве альтернативы вы можете использовать регулярное выражение с глобальным флагом (как предложено Эриком Реппеном и Сагар Гала , ниже), чтобы заменить все вхождения на
РЕДАКТИРОВАТЬ: Так как всем здесь так весело, и user1293504 , похоже, не вернется в ближайшее время, чтобы ответить на уточняющие вопросы, вот метод удаления N-го символа из строки:
Поскольку user1293504 использовал обычный счетчик вместо индекса с нулевым индексом, мы должны удалить 1 из индекса, если вы хотите использовать это для репликации того, как
charAt
работает, не вычитайте 1 из индекса в 3-й строке и используйтеtmp.splice(i, 1)
вместо этого.источник
"/"
Простой функциональный способ javascript будет
mystring = mystring.split('/r').join('/')
простой, быстрый, он заменяет глобально и не требует функций или прототипов
источник
'/'
Всегда есть строковые функции, если вы знаете, что всегда собираетесь удалить четвертый символ:
источник
str.slice(0, 0) + str.slice(1, str.length)
удаляет первое иstr.slice(0, str.length-1) + str.slice(str.length, str.length)
удаляет последнее. (Конечно, вы бы удалили лишние части, если знаете, что всегда удаляете первую или последнюю, но если они переменные, они работают так же хорошо, как и любой другой индекс.)Ваш первый функционал почти прав. Просто удалите флаг «g», который обозначает «глобальный» (правка), и дайте ему некоторый контекст, чтобы определить второй «r».
Изменить: не видел, что это был второй «г», прежде чем добавить «/». Требуется \ / для экранирования '/' при использовании аргумента regEx. Спасибо за возражения, но я был неправ, поэтому я исправлю и добавлю больше подробностей для людей, заинтересованных в лучшем понимании основ RegEx, но это будет работать:
Теперь для чрезмерного объяснения:
Когда вы читаете / пишете шаблон regEx, думайте так: <символ или набор символов>, затем <символ или набор символов>, а затем <...
В regEx <символ или набор символов> может быть по одному:
Так что читайте как e, затем a, затем c и т.д ...
Или один символ <a или набор символов> могут быть символами, описываемыми классом символов:
Или расширен, чтобы соответствовать количеству символов (но все же лучше всего рассматривать его как отдельный элемент с точки зрения последовательного шаблона):
Так что собери кучу вместе
И, конечно, я переоценил, но моя точка зрения была просто так:
представляет собой серию из 3 элементов шаблона (за вещью следует вещь, за которой следует вещь).
И это так:
Как ни странно, как начинает выглядеть regEx, все это разбивается на ряд вещей (потенциально многосимвольных), следующих друг за другом последовательно. В некотором смысле это был базовый момент, но мне потребовалось некоторое время, чтобы пройти мимо, так что я зашел за борт, объясняя это здесь, поскольку думаю, что это поможет ОП и другим новичкам в RegEx понять, что происходит. Ключом к чтению / письму regEx является разбиение его на эти части.
источник
Для глобальной замены '/ r' этот код работал для меня.
источник
Просто исправь свой
replaceAt
:Я бы назвал это
removeAt
вместо этого. :)источник
char.length
это ноль. Вы должны добавить1
в этом случае, чтобы пропустить символ.источник
replaceAt
не работает. Это должен быть комментарий к исходному вопросу, а не ответ. :)Any thoughts?
.Если это всегда четвертый символ в вашей строке, вы можете попробовать:
источник
Это потому, что когда
char
равен""
,char.length
равен 0, так что ваши подстроки объединяются, чтобы сформировать исходную строку. Следуя вашей попытке кода, будет работать следующее:источник
Создать функцию, как показано ниже
Чтобы заменить дать символ, как показано ниже
и удалить символ с определенным индексом, дать второй параметр в виде пустой строки
источник
Если вы просто хотите удалить один символ и если вам известен индекс символа, который вы хотите удалить, вы можете использовать следующую функцию:
источник
Мне не нравится использовать функцию замены для удаления символов из строки. Это не логично делать так. Обычно я программирую на C # (Sharp), и всякий раз, когда я хочу удалить символы из строки, я использую метод Remove класса String, но не метод Replace, даже если он существует, потому что, когда я собираюсь удалить, я удаляю, не заменить. Это логично!
В Javascript нет функции удаления для строки, но есть функция substr. Вы можете использовать функцию substr один или два раза, чтобы удалить символы из строки. Вы можете сделать следующую функцию, чтобы удалить символы в начале индекса до конца строки, точно так же, как метод c # сначала перегружает String.Remove (int startIndex):
и / или вы также можете сделать следующую функцию для удаления символов в начальном индексе и в счетчике, как вторая перегрузка метода c # String.Remove (int startIndex, int count):
и тогда вы можете использовать эти две функции или одну из них для ваших нужд!
Пример:
Выход: crt / 2002_2
Достижение целей с помощью техники без логики может вызвать путаницу в понимании кода и будущие ошибки, если вы будете делать это много в большом проекте!
источник
String.prototype.replace
, которое является частью базового API. Более того, понимание удаления как особого случая замены вполне логично с точки зрения программирования. Вы не должны пытаться сделать так, чтобы ваш API содержал все слова в английском словаре, вы должны попытаться свести ваш API к минимальной ортогональной базе.Следующая функция работала лучше всего для моего случая:
источник
Самый короткий путь - использовать сплайс
источник
c
и"
)Вы можете использовать это:
if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)
Объяснение:
if ( str[4] === 'r' )
Проверьте, является ли 5-й символ
'r'
str.slice(0, 4)
Нарезать строку, чтобы получить все до
'r'
+ str.slice(5)
Добавьте остальную часть строки.
Minified:
s=s[4]=='r'?s.slice(0,4)+s.slice(5):s
[37 байт!]ДЕМО:
источник
источник
Это улучшение простого ответа (опустить длину)
Показать фрагмент кода
источник
В C # (Sharp) вы можете сделать пустой символ как '\ 0'. Может быть, вы можете сделать это:
Ищите в Google или просматривайте интернет и проверяйте, позволяет ли JavaScript создавать пустые символы, как в C #. Если да, то узнайте, как это сделать, и, возможно, функция replaceAt, наконец, сработает, и вы добьетесь того, чего хотите!
Наконец этот символ 'r' будет удален!
источник