Rimuovi la virgola iniziale da una stringa


187

Ho la seguente stringa:

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

Voglio trasformarlo in un array, ma ovviamente questo non è valido a causa della prima virgola. Come posso rimuovere la prima virgola dalla mia stringa e renderla una matrice valida?

Vorrei finire con qualcosa del genere:

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

43
Basta usaremyString.slice(1);
NBK il

2
@NikhilBenKuruvilla questo rimuoverà qualsiasi carattere anche se non è una virgola. Ecco la rimozione di solo virgola del primo carattere stackoverflow.com/a/39047793/696535
Pawel


Pawel, quale sarebbe l'espressione per rimuovere il primo punto e virgola, indipendentemente da dove si trova dall'inizio della stringa? Devo usare questo: funzione removeFirstSemicolon (str) {str = str.trim (); str = str.replace (/ ^; /, ''); return str; } Potrebbe essere più utile: spesso c'è uno spazio bianco prima e dopo il personaggio, quindi devo usare due volte il trim.
user1585204,

Risposte:


312

Per rimuovere il primo carattere dovresti usare:

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

Non sono sicuro che questo sarà il risultato che stai cercando, perché dovrai comunque dividerlo per creare un array con esso. Forse qualcosa del tipo:

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

Tieni presente che il carattere farà parte di ogni stringa nella divisione qui.


94

In questo caso specifico (all'inizio c'è sempre un singolo carattere che vuoi rimuovere) vorrai:

str.substring(1)

Tuttavia, se vuoi essere in grado di rilevare se la virgola è lì e rimuoverla se lo è, allora qualcosa di simile:

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

3
+1 anche per il condizionale. È sempre meglio assumere una virgola che potrebbe non esserci.
JoeMoe1984,

1
Questa è una risposta migliore e dovrebbe essere la risposta accettata.
Christopher Smit,

Non è necessario eseguire la sottostringa due volte per verificare il primo carattere: if (str[0] === ',')solo per renderlo leggermente più performante.
Croot

11

One-liner

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

Tornerò.


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

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

Ciò presuppone che la stringa con cui inizi sia in realtà una stringa, come hai detto, e non una matrice di stringhe.


4

Supponendo che la stringa si chiami myStr:

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

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

Si noti che se una stringa può mancare nell'elenco senza nemmeno avere le virgolette presenti e si desidera un punto vuoto nella posizione corrispondente nell'array, sarà necessario scrivere manualmente la divisione per una soluzione affidabile.


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

Risultati in:

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

Prima dividi con le virgole possibilmente racchiuse tra virgolette singole,
quindi filtra le parti non veritiere (vuote).


3

Per trasformare una stringa in un array di solito uso split()

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

Questo è quasi quello che vuoi. Ora devi solo spogliare i primi due e l'ultimo personaggio:

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

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

Per estrarre una sottostringa da una stringa di solito uso slice()ma substr()e substring()faccio anche il lavoro.


1

Puoi usare direttamente la funzione di sostituzione su javascript con regex o definire una funzione di aiuto come in php ltrim (a sinistra) e rtrim (a destra):

1) Con sostituire:

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

2) Funzioni di aiuto:

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

Puoi fare e altre cose per aggiungere un parametro alla funzione di aiuto con ciò che vuoi sostituire il carattere, ecc.


1
s=s.substring(1);

Mi piace mantenere le cose semplici.


0

questo rimuoverà le virgole e gli spazi finali

var str = ",'first string','more','even more'";
var trim = str.replace(/(^\s*,)|(,\s*$)/g, '');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.