split string solo sulla prima istanza del carattere specificato

Nel mio codice ho diviso una stringa basata su _ e ho afferrato il secondo elemento dell’array.

 var element = $(this).attr('class'); var field = element.split('_')[1]; 

Prende good_luck e mi dà luck . Funziona alla grande!

Ma ora ho una class che sembra good_luck_buddy . Come faccio a far luck_buddy mio javascript ignori il secondo _ e dammi luck_buddy ?

Ho trovato questo var field = element.split(new char [] {'_'}, 2); in ac # stackoverflow answer ma non funziona. L’ho provato su jsFiddle …

Usa le parentesi di cattura :

 "good_luck_buddy".split(/_(.+)/)[1] "luck_buddy" 

Sono definiti come

Se il separator contiene parentesi di acquisizione, i risultati corrispondenti vengono restituiti nell’array.

Quindi in questo caso vogliamo dividere in _.+ (Ovvero separare il separatore essendo una sottostringa che inizia con _ ) ma anche lasciare che il risultato contenga una parte del nostro separatore (cioè tutto dopo _ ).

In questo esempio il nostro separatore (corrispondente a _(.+) ) È _luck_buddy e il gruppo catturato (all’interno del separatore) è lucky_buddy . Senza la parentesi di cattura il luck_buddy (matching .+ ) Non sarebbe stato incluso nell’array dei risultati come nel caso della split semplice che i separatori non sono inclusi nel risultato.

A cosa servono le espressioni e gli array regolari?

 myString = myString.substring(myString.indexOf('_')+1) 
 var myString= "hello_there_how_are_you" myString = myString.substring(myString.indexOf('_')+1) console.log(myString) 

Evito RegExp a tutti i costi. Ecco un’altra cosa che puoi fare:

 "good_luck_buddy".split('_').slice(1).join('_') 

Sostituisci la prima istanza con un segnaposto unico, quindi dividi da lì.

 "good_luck_buddy".replace(/\_/,'&').split('&') ["good","luck_buddy"] 

Questo è più utile quando sono necessari entrambi i lati della divisione.

Puoi usare l’espressione regolare come:

 var arr = element.split(/_(.*)/) 

È ansible utilizzare il secondo parametro che specifica il limite della divisione. vale a dire: var field = element.split (‘_’, 1) [1];

Javascript’s String.split purtroppo non ha modo di limitare il numero effettivo di split. Ha un secondo argomento che specifica il numero di elementi di divisione effettivi restituiti, il che non è utile nel tuo caso. La soluzione sarebbe dividere la stringa, spostare il primo object fuori, quindi ricongiungersi agli elementi rimanenti ::

 var element = $(this).attr('class'); var parts = element.split('_'); parts.shift(); // removes the first item from the array var field = parts.join('_'); 

La soluzione di Mark F è fantastica ma non supportata dai vecchi browser. La soluzione di Kennebec è fantastica e supportata dai vecchi browser, ma non supporta l’espressione regolare.

Quindi, se stai cercando una soluzione che divida la tua stringa una sola volta, supportata da vecchi browser e supporti regex, ecco la mia soluzione:

 String.prototype.splitOnce = function(regex) { var match = this.match(regex); if(match) { var match_i = this.indexOf(match[0]); return [this.substring(0, match_i), this.substring(match_i + match[0].length)]; } else { return [this, ""]; } } var str = "something/////another thing///again"; alert(str.splitOnce(/\/+/)[1]); 

Per i principianti come me che non sono abituati all’espressione regolare, questa soluzione alternativa ha funzionato:

  var field = "Good_Luck_Buddy"; var newString = field.slice( field.indexOf("_")+1 ); 

Il metodo slice () estrae una parte di una stringa e restituisce una nuova stringa e il metodo indexOf () restituisce la posizione della prima occorrenza trovata di un valore specificato in una stringa.

Questo ha funzionato per me su Chrome + FF:

 "foo=bar=beer".split(/^[^=]+=/)[1] // "bar=beer" "foo==".split(/^[^=]+=/)[1] // "=" "foo=".split(/^[^=]+=/)[1] // "" "foo".split(/^[^=]+=/)[1] // undefined 

Se hai bisogno anche della chiave prova questo:

 "foo=bar=beer".split(/^([^=]+)=/) // Array [ "", "foo", "bar=beer" ] "foo==".split(/^([^=]+)=/) // [ "", "foo", "=" ] "foo=".split(/^([^=]+)=/) // [ "", "foo", "" ] "foo".split(/^([^=]+)=/) // [ "foo" ] //[0] = ignored (holds the string when there's no =, empty otherwise) //[1] = hold the key (if any) //[2] = hold the value (if any) 

Ho bisogno delle due parti di stringa, quindi, regex lookbehind mi aiuta con questo.

 const full_name = 'Maria do Bairro'; const [first_name, last_name] = full_name.split(/(?<=^[^ ]+) /); console.log(first_name); console.log(last_name); 

Usa il metodo stringa replace() con un’espressione regolare :

 document.body.innerHTML = "good_luck_buddy".replace(/.*?_/, "");