Remover vírgula inicial de uma sequência


187

Eu tenho a seguinte string:

",'first string','more','even more'"

Quero transformar isso em uma matriz, mas obviamente isso não é válido devido à primeira vírgula. Como posso remover a primeira vírgula da minha string e torná-la uma matriz válida?

Eu gostaria de terminar com algo assim:

myArray  = ['first string','more','even more']

43
Simplesmente usemyString.slice(1);
NBK

2
@NikhilBenKuruvilla isso removerá qualquer caractere, mesmo que não seja uma vírgula. Aqui é primeiro caractere remoção somente por vírgulas stackoverflow.com/a/39047793/696535
Pawel


Pawel, qual seria a expressão para remover o primeiro ponto e vírgula, não importa onde esteja desde o início da string? Eu tenho que usar isso: function removeFirstSemicolon (str) {str = str.trim (); str = str.replace (/ ^; /, ''); return str; } Isso pode ser mais útil - geralmente há espaço em branco antes e depois do personagem, então eu realmente preciso usar o trim duas vezes.
user1585204

Respostas:


312

Para remover o primeiro caractere, você usaria:

var myOriginalString = ",'first string','more','even more'"; 
var myString = myOriginalString.substring(1);

Não tenho certeza se esse será o resultado que você está procurando, porque você ainda precisará dividi-lo para criar uma matriz com ele. Talvez algo como:

var myString = myOriginalString.substring(1);
var myArray = myString.split(',');

Lembre-se de que o caractere 'fará parte de cada string na divisão aqui.


94

Nesse caso específico (sempre há um único caractere no início que você deseja remover), você deseja:

str.substring(1)

No entanto, se você deseja detectar se a vírgula está lá e removê-la, existe algo como:

if (str[0] == ',') { 
  str = str.substring(1);
}

3
+1 para o condicional também. É sempre melhor supor que uma vírgula pode não estar lá.
21714

1
Esta é uma resposta melhor e deve ser a resposta aceita.
Christopher Smit

Não é necessário executar a substring duas vezes para verificar o primeiro caractere: if (str[0] === ',')apenas para torná-lo um pouco mais eficiente.
Croot 27/07

11

One-liner

str = str.replace(/^,/, '');

Eu voltarei.


9
var s = ",'first string','more','even more'";

var array = s.split(',').slice(1);

Supondo que a string com a qual você começa seja de fato uma String, como você disse, e não uma Matriz de strings.


4

Supondo que a string seja chamada myStr:

// Strip start and end quotation mark and possible initial comma
myStr=myStr.replace(/^,?'/,'').replace(/'$/,'');

// Split stripping quotations
myArray=myStr.split("','");

Observe que, se uma string estiver faltando na lista sem que suas aspas estejam presentes e você desejar um espaço vazio no local correspondente na matriz, será necessário escrever a divisão manualmente para obter uma solução robusta.


4
var s = ",'first string','more','even more'";  
s.split(/'?,'?/).filter(function(v) { return v; });

Resulta em:

["first string", "more", "even more'"]

Primeiro divida com vírgulas, possivelmente entre aspas simples,
depois filtre as partes que não são verdadeiras (vazias).


3

Para transformar uma string em uma matriz, eu costumo usar split()

> var s = ",'first string','more','even more'"
> s.split("','")
[",'first string", "more", "even more'"]

Isso é quase o que você quer. Agora você só precisa retirar os dois primeiros e o último caractere:

> s.slice(2, s.length-1)
"first string','more','even more"

> s.slice(2, s.length-2).split("','");
["first string", "more", "even more"]

Para extrair uma substring de uma string eu costumo usar slice(), mas substr()e substring()também fazer o trabalho.


1

Você pode usar diretamente substituir a função no javascript pelo regex ou definir uma função de ajuda como em php ltrim (à esquerda) e rtrim (à direita):

1) Com substituir:

var myArray = ",'first string','more','even more'".replace(/^\s+/, '').split(/'?,?'/);

2) Funções de ajuda:

if (!String.prototype.ltrim) String.prototype.ltrim = function() {
    return this.replace(/^\s+/, '');
};
if (!String.prototype.rtrim) String.prototype.rtrim = function() {
    return this.replace(/\s+$/, '');
};
var myArray = ",'first string','more','even more'".ltrim().split(/'?,?'/).filter(function(el) {return el.length != 0});;

Você pode fazer e outras coisas para adicionar parâmetro à função de ajuda com o que deseja substituir o caractere, etc.


1
s=s.substring(1);

Eu gosto de manter as coisas simples.


0

isso removerá as vírgulas e espaços à direita

var str = ",'first string','more','even more'";
var trim = str.replace(/(^\s*,)|(,\s*$)/g, '');
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.