2012-06-22 9 views
7

Quiero dividir una cadena en Javascript utilizando la función de división en 2 partes.División de Javascript dividir la cadena en 2 partes, independientemente del número de caracteres de saliva presentes en la cadena

Por ejemplo, he cadena:

str='123&345&678&910' 

si uso la división javascripts, se dividió en 4 partes. Pero necesito que esté en 2 partes solo considerando el primer '&' con el que se encuentra.

Como tenemos en Perl dividida, si yo uso como:

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

se partió de STR en 2 partes, pero JavaScript sólo me da:

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

i quieren seg a ser:

sec=345&678&910 

¿Cómo puedo hacerlo en Javascript.

+4

@ ajax333221. ¡Es una buena pregunta! Mencionar la sintaxis de otro idioma no lo convierte en una mala pregunta ni en una pregunta de traducción. – gdoron

+0

Usa 'indexOf' para obtener el índice del primer' & '. Luego use la función 'substring' para extraer ambas partes. Pero es imposible ser bloqueado por esto si googleas "funciones de cadena de JavaScript". –

+1

@gdoron no dijo que no lo era, solo siento que podría intentar hacer un poco más él mismo. Recuerde, SO es una de las últimas opciones – ajax333221

Respuesta

4

Se puede utilizar en lugar de matchsplit:

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

de salida:

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

WOW disparos en la cabeza-overkill! :) – gdoron

3

Puede permanecer en la parte split utilizando el siguiente truco:

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

Gracias @Florian, increíble truco para seguir con split :) – kailash19

+0

@ kailash19 de nada, creo que es la manera más fácil :) –

+0

+1 muy legible – ajax333221

1

escribí esta función:

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​​​ 

La salida será o bien una matriz vacía (no coincide) o una matriz con 2 elementos (antes de la división y todo después)

Demo

1

que tienen que:

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"]; 

por conveniencia:

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

¿Qué pasa con el uso de split() y replace()?:

Dado que tenemos esa cadena str='123&345&678&910' Podemos hacer

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

Tenga en cuenta que split() devuelve una matriz que es por eso que conseguir el índice con first[0] es recomendada, sin embargo, sin obtener el índice, todavía funcionó según sea necesario, es decir, first+"&".

Siéntase libre de reemplazar el "&" con la cadena que necesita para dividir.

Espero que esto ayude :)

Cuestiones relacionadas