2012-06-22 10 views
7

Voglio dividere una stringa in Javascript utilizzando la funzione di divisione in 2 parti.Javascript diviso per dividere la stringa in 2 parti indipendentemente dal numero di caratteri di sputo presenti nella stringa

Per esempio ho stringa:

str='123&345&678&910' 

Se uso il javascripts scissione, esso dividerlo in 4 parti. Ma ho bisogno che sia in 2 parti solo considerando il primo '&' che incontra.

Come abbiamo in Perl diviso, se io uso come:

($fir, $sec) = split(/&/,str,2) 

si divise di str in 2 parti, ma javascript mi ​​dà solo:

str.split(/&/, 2); 
fir=123 
sec=345 

voglio sec essere:

sec=345&678&910 

Come posso farlo in Javascript.

+4

@ ajax333221. È una bella domanda! La menzione della sintassi di altre lingue non costituisce una cattiva domanda né una domanda di traduzione. – gdoron

+0

Usa 'indexOf' per ottenere l'indice del primo' & '. Quindi usa la funzione 'sottostringa' per estrarre entrambe le parti. Ma è impossibile essere bloccato da questo se si google "funzioni stringa javascript". –

+1

@gdoron non ha detto che non lo era, sento solo che potrebbe tentare di fare un po 'di più se stesso. Ricorda, SO è una delle ultime opzioni – ajax333221

risposta

4

È possibile utilizzare match invece di split:

str='123&345&678&910'; 
splited = str.match(/^([^&]*?)&(.*)$/); 
splited.shift(); 
console.log(splited); 

uscita:

["123", "345&678&910"] 
+2

WOW headshot-overkill! :) – gdoron

3

Si può rimanere sulla parte split utilizzando il seguente trucco:

var str='123&345&678&910', 
    splitted = str.split('&'), 
    // shift() removes the first item and returns it 
    first = splitted.shift(); 

console.log(first); // "123" 
console.log(splitted.join('&')); // "345&678&910" 
+0

Grazie a @Florian, fantastico trucco per attaccare con split :) – kailash19

+0

@ kailash19 sei il benvenuto, penso che sia il modo più semplice :) –

+0

+1 molto leggibile – ajax333221

1

ho scritto questa funzione:

function splitter(mystring, mysplitter) { 
    var myreturn = [], 
     myindexplusone = mystring.indexOf(mysplitter) + 1; 

    if (myindexplusone) { 
     myreturn[0] = mystring.split(mysplitter, 1)[0]; 
     myreturn[1] = mystring.substring(myindexplusone); 
    } 

    return myreturn; 
} 

var str = splitter("hello-world-this-is-a-test", "-"); 

console.log(str.join("<br>")); 
//hello 
//world-this-is-a-test​​​ 

L'output sarà o una matrice vuota (non corrispondere) o un array con 2 elementi (prima della scissione e tutto dopo)

Demo

1

ho che:

var str='123&345&678&910'; 
str.split('&',1).concat(str.split('&').slice(1).join('&')); 
//["123", "345&678&910"] 



str.split('&',2).concat(str.split('&').slice(2).join('&')); 
//["123", "345", "678&910"]; 

per comodità:

String.prototype.mySplit = function(sep, chunks) { 
    chunks = chunks|=0 &&chunks>0?chunks-1:0; 
    return this.split(sep, chunks) 
       .concat( 
        chunks?this.split(sep).slice(chunks).join(sep):[] 
       ); 
} 
0

cosa circa l'uso di split() e replace()?:

Dato che abbiamo quella stringa str='123&345&678&910' Possiamo fare

var first = str.split("&",1); //gets the first word 
    var second = str.replace(first[0]+"&", ""); //removes the first word and the ampersand 

prega di notare che split() restituisce una matrice che è il motivo per cui sempre l'indice con first[0] è raccomandato, tuttavia, senza ottenere l'indice, funzionava comunque secondo necessità, ovvero first+"&".

Sentitevi liberi di sostituire "&" con la stringa che è necessario dividere con.

Spero che questo aiuti :)

Problemi correlati