¿Cuál es la diferencia entre substr y substring?

Resuelto Difference Engine asked hace 13 años • 11 respuestas

Cuál es la diferencia entre

alert("abc".substr(0,2));

y

alert("abc".substring(0,2));

Ambos parecen generar "ab".

Difference Engine avatar Sep 19 '10 18:09 Difference Engine
Aceptado

La diferencia está en el segundo argumento. El segundo argumento substringes el índice en el que detenerse (pero no incluir), pero el segundo argumento substres la longitud máxima a devolver.

¿Enlaces?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring

Delan Azabani avatar Sep 19 '2010 11:09 Delan Azabani

substr( MDN ) toma parámetros como (from, length).
substring( MDN ) toma parámetros como (from, to).

Actualización : MDN considera substrlegado.

alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"

Puede recordar que (con una i ) toma índices , al igual que otro método de extracción de cadenas, sl i ce (con una i ).substring

Al comenzar desde 0, puede utilizar cualquiera de los métodos.

Colin Hebert avatar Sep 19 '2010 11:09 Colin Hebert

Como se insinúa en la respuesta de yatima2975 , hay una diferencia adicional:

substr()acepta una posición inicial negativa como un desplazamiento desde el final de la cadena. substring()no es.

De MDN :

Si el inicio es negativo, substr() lo usa como índice de caracteres desde el final de la cadena.

Entonces, para resumir las diferencias funcionales:

substring(begin-offset, end-offset-exclusive)donde el desplazamiento inicial es 0o mayor

substr(begin-offset, length)donde el desplazamiento inicial también puede ser negativo

JefferMC avatar Feb 09 '2015 19:02 JefferMC

La principal diferencia es que

  • substr()le permite especificar la longitud máxima a devolver
  • substring()le permite especificar los índices y el segundo argumento NO es inclusivo

Hay algunas sutilezas adicionales entre substr()y substring()como el manejo de argumentos iguales y argumentos negativos. También tenga en cuenta substring()que slice()son similares pero no siempre iguales.

  //*** length vs indices:
    "string".substring(2,4);  // "ri"   (start, end) indices / second value is NOT inclusive
    "string".substr(2,4);     // "ring" (start, length) length is the maximum length to return
    "string".slice(2,4);      // "ri"   (start, end) indices / second value is NOT inclusive

  //*** watch out for substring swap:
    "string".substring(3,2);  // "r"    (swaps the larger and the smaller number)
    "string".substr(3,2);     // "in"
    "string".slice(3,2);      // ""     (just returns "")

  //*** negative second argument:
    "string".substring(2,-4); // "st"   (converts negative numbers to 0, then swaps first and second position)
    "string".substr(2,-4);    // ""
    "string".slice(2,-4);     // ""

  //*** negative first argument:
    "string".substring(-3);   // "string"        
    "string".substr(-3);      // "ing"  (read from end of string)
    "string".slice(-3);       // "ing"        
  
Nate Lipp avatar Mar 09 '2017 02:03 Nate Lipp

Otro problema con el que me encontré recientemente es que en IE 8, "abcd".substr(-1)regresa erróneamente "abcd", mientras que Firefox 3.6 regresa "d"como debería. sliceFunciona correctamente en ambos.

Puede encontrar más información sobre este tema aquí .

yatima2975 avatar Jun 01 '2011 14:06 yatima2975