Estou tão perto de conseguir isso, mas simplesmente não está certo. Tudo o que eu gostaria de fazer é remover o caractere r
de uma string. O problema é que há mais de uma instância de r
na sequência. No entanto, é sempre o caractere no índice 4 (portanto, o quinto caractere).
cadeia de exemplo: crt/r2002_2
O que eu quero: crt/2002_2
Essa função de substituição remove os dois r
mystring.replace(/r/g, '')
Produz: ct/2002_2
Eu tentei esta função:
String.prototype.replaceAt = function (index, char) {
return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')
Só funciona se eu o substituir por outro caractere. Não o removerá simplesmente.
Alguma ideia?
javascript
string
replace
character
user1293504
fonte
fonte
Respostas:
será substituído
/r
pelo/
usoString.prototype.replace
.Como alternativa, você pode usar regex com uma bandeira global (como sugerido por Erik Reppen e Sagar Gala , abaixo) para substituir todas as ocorrências por
EDIT: Como todo mundo está se divertindo muito aqui e o user1293504 parece não voltar tão cedo para responder a perguntas esclarecedoras, aqui está um método para remover o caractere N-ésimo de uma string:
Como o user1293504 usou a contagem normal em vez de uma contagem com índice zero, precisamos remover 1 do índice, se você desejar usá-lo para replicar como as
charAt
obras não subtraem 1 do índice na terceira linha e, emtmp.splice(i, 1)
vez disso, usam .fonte
"/"
Uma maneira simples de javascript funcional seria
mystring = mystring.split('/r').join('/')
simples, rápido, substitui globalmente e não há necessidade de funções ou protótipos
fonte
'/'
Sempre há as funções de string, se você souber que sempre removerá o quarto caractere:
fonte
str.slice(0, 0) + str.slice(1, str.length)
remove o primeiro estr.slice(0, str.length-1) + str.slice(str.length, str.length)
remove o último. (Claro que você iria remover as partes redundantes, se você sabe que está sempre de retirar a primeira ou a última, mas se eles são variáveis eles funcionam tão bem como qualquer outro índice.)Sua primeira função está quase certa. Apenas remova o sinalizador 'g' que significa 'global' (editar) e dê a ele algum contexto para identificar o segundo 'r'.
Edit: não vi que era o segundo 'r' antes, então adicionei o '/'. Precisa \ / para escapar do '/' ao usar um argumento regEx. Obrigado pelas votações, mas eu estava errado, então corrigirei e adicionarei mais detalhes para as pessoas interessadas em entender melhor o básico do regEx, mas isso funcionaria:
Agora, a explicação excessiva:
Ao ler / escrever um padrão regEx, pense em termos de: <um caractere ou conjunto de caracteres> seguido por <a caractere ou conjunto de caracteres> seguido por <...
No regEx, <um caractere ou conjunto de caracteres> pode ser um de cada vez:
Então leia como e, seguido por a, seguido por c, etc ...
Ou um único <a caractere ou conjunto de caracteres> poderia ser caracteres descritos por uma classe de caracteres:
Ou expandido para corresponder a uma quantidade de caracteres (mas ainda é melhor pensar como um elemento único em termos do padrão seqüencial):
Então junte um monte:
E é claro que eu exagerei, mas meu argumento era simplesmente o seguinte:
é uma série de 3 elementos de padrão (uma coisa seguida por uma coisa seguida por uma coisa).
E assim é isso:
Por mais maluco que o regEx comece a parecer, tudo se decompõe em uma série de coisas (coisas potencialmente com vários caracteres) que se sucedem sequencialmente. É um ponto básico, mas que demorei um pouco para passar, por isso exagerei na explicação aqui, pois acho que ajudaria o OP e outros novos no RegEx a entender o que está acontecendo. A chave para ler / escrever regEx é dividi-la em partes.
fonte
Para a substituição global de '/ r', esse código funcionou para mim.
fonte
Basta corrigir o seu
replaceAt
:Eu chamaria assim
removeAt
. :)fonte
char.length
é zero. Você precisa adicionar1
neste caso para pular o caractere.fonte
replaceAt
não está funcionando. Deve ser um comentário para a pergunta original em vez de uma resposta. :)Any thoughts?
,.Se for sempre o quarto caractere em suaString, você pode tentar:
fonte
Isso ocorre porque quando
char
é igual a""
,char.length
é 0, então suas substrings se combinam para formar a sequência original. Indo com sua tentativa de código, o seguinte funcionará:fonte
Criar função como abaixo
Para substituir, dê um caractere como abaixo
e para remover o caractere no índice definido, forneça o segundo parâmetro como string vazia
fonte
Se você deseja apenas remover um caractere e se souber o índice de um caractere que deseja remover, poderá usar a seguinte função:
fonte
Não gosto de usar a função replace para remover caracteres da string. Isso não é lógico para fazer assim. Normalmente, programa em C # (Sharp) e, sempre que quero remover caracteres da string, uso o método Remove da classe String, mas não o método Replace, mesmo que exista, porque quando estou prestes a remover, removo, sem substituição. Isso é lógico!
Em Javascript, não há função de remoção para string, mas existe a função substr. Você pode usar a função substr uma ou duas vezes para remover caracteres da string. Você pode criar a seguinte função para remover caracteres no índice inicial até o final da sequência, assim como o método c # sobrecarrega primeiro a String.Remove (int startIndex):
e / ou você também pode criar a seguinte função para remover caracteres no índice inicial e na contagem, assim como a segunda sobrecarga do método c # String.Remove (int startIndex, int count):
e então você pode usar essas duas funções ou uma delas para suas necessidades!
Exemplo:
Saída: crt / 2002_2
Atingir objetivos executando técnicas sem lógica pode causar confusões no entendimento do código e erros futuros, se você fizer muito isso em um projeto grande!
fonte
String.prototype.replace
, que faz parte da API base. Além disso, entender a remoção como um caso especial de substituição é bastante lógico no que diz respeito à programação. Você não deve tentar fazer com que sua API compreenda todas as palavras do dicionário em inglês; tente reduzi-la à sua base ortogonal mínima.A seguinte função funcionou melhor para o meu caso:
fonte
A maneira mais curta seria usar a emenda
fonte
c
e o"
)Você pode usar isto:
if ( str[4] === 'r' ) str = str.slice(0, 4) + str.slice(5)
Explicação:
if ( str[4] === 'r' )
Verifique se o quinto caractere é um
'r'
str.slice(0, 4)
Corte a corda para obter tudo antes do
'r'
+ str.slice(5)
Adicione o restante da string.
Minificado:
s=s[4]=='r'?s.slice(0,4)+s.slice(5):s
[37 bytes!]DEMO:
fonte
fonte
Isso é melhoria da resposta simpleigh (omitir comprimento)
Mostrar snippet de código
fonte
Em C # (Nítido), você pode criar um caractere vazio como '\ 0'. Talvez você possa fazer isso:
Pesquise no google ou navegue por vários locais e verifique se o javascript permite criar caracteres vazios, como o C #. Se sim, aprenda como fazê-lo e talvez a função replaceAt finalmente funcione, e você conseguirá o que deseja!
Finalmente, esse caractere 'r' será removido!
fonte