web-dev-qa-db-fra.com

Quelle est la différence entre String.slice et String.substring?

Est-ce que quelqu'un sait quelle est la différence entre ces deux méthodes:

String.protorype.slice
String.protorype.substring
657
tmim

slice() fonctionne comme substring() avec quelques comportements différents.

Syntax: string.slice(start, stop);
Syntax: string.substring(start, stop);

Ce qu'ils ont en commun:

  1. Si start est égal à stop: renvoie une chaîne vide
  2. Si stop est omis: extrait les caractères jusqu'à la fin de la chaîne
  3. Si l'un des arguments est supérieur à la longueur de la chaîne, celle-ci sera utilisée à la place.

Distinctions desubstring():

  1. Si start > stop, alors substring échangera ces 2 arguments.
  2. Si l'un des arguments est négatif ou est NaN, il est traité comme s'il s'agissait de 0.

Distinctions deslice():

  1. Si start > stop, slice() retournera la chaîne vide. ("")
  2. Si start est négatif: définit le caractère à partir de la fin de la chaîne, exactement comme substr() dans Firefox. Ce comportement est observé dans Firefox et IE.
  3. Si stop est négatif: définit stop à: string.length – Math.abs(stop) (valeur d'origine), sauf la limite à 0 (donc, Math.max(0, string.length + stop)) comme indiqué dans spécification ECMA .

Source: Art rudimentaire de la programmation et du développement: Javascript: substr () v.s. sous-chaîne ()

711
Daniel Vassallo

Ben Nadel a écrit un bon article à ce sujet, il souligne la différence entre les paramètres et les fonctions suivantes:

String.slice( begin [, end ] )
String.substring( from [, to ] )
String.substr( start [, length ] )

Il souligne également que si les paramètres à découper sont négatifs, ils référencent la chaîne à partir de la fin. La sous-chaîne et la sous-chaîne ne le sont pas. 

Voici son article à ce sujet http://www.bennadel.com/blog/2159-using-slice-substring-and-substr-in-javascript.htm

La réponse est bonne mais nécessite une lecture un peu plus approfondie. Surtout avec la nouvelle terminologie "stop".

My Go - organisé par différences pour le rendre utile en plus de la première réponse de Daniel ci-dessus:

1) indices négatifs. La sous-chaîne nécessite des index positifs et définit un index négatif sur 0. L'indice négatif de Slice indique la position à partir de la fin de la chaîne.

"1234".substring(-2, -1) == "1234".substring(0,0) == ""
"1234".slice(-2, -1) == "1234".slice(2, 3) == "3"

2) échange d'index. La sous-chaîne va réorganiser les index pour rendre le premier index inférieur ou égal au second index.

"1234".substring(3,2) == "1234".substring(2,3) == "3"
"1234".slice(3,2) == ""

--------------------------

Commentaire général - Je trouve étrange que le deuxième index soit la position après le dernier caractère de la tranche ou de la sous-chaîne. Je m'attendrais à ce que "1234" .slice (2,2) renvoie "3". Cela rend la confusion d'Andy justifiée ci-dessus - je m'attendrais à ce que "1234" .slice (2, -1) renvoie "34". Oui, cela signifie que je suis nouveau sur Javascript. Cela signifie aussi ce comportement:

"1234".slice(-2, -2) == "", "1234".slice(-2, -1) == "3", "1234".slice(-2, -0) == "" <-- you have to use length or omit the argument to get the 4.
"1234".slice(3, -2) == "", "1234".slice(3, -1) == "", "1234".slice(3, -0) == "" <-- same issue, but seems weirder.

Mon 2c.

10
Gerard ONeill

La différence entre la sous-chaîne et la tranche - est la façon dont ils travaillent avec des arguments négatifs et des lignes négligées à l'étranger:

sous-chaîne (début, fin)

Les arguments négatifs sont interprétés comme zéro. Les valeurs trop grandes sont tronquées à la longueur de la chaîne: alert ("testme" .substring (-2)); // "testme", -2 devient 0

De plus, si début> fin, les arguments sont interchangés, c'est-à-dire que la ligne de tracé retourne entre le début et la fin:

alert ( "testme" .substring (4, -1)); // "test"
// -1 Becomes 0 -> got substring (4, 0)
// 4> 0, so that the arguments are swapped -> substring (0, 4) = "test"

tranche

Les valeurs négatives sont mesurées à partir de la fin de la ligne:

alert ( "testme" .slice (-2)); // "me", from the end position 2
alert ( "testme" .slice (1, -1)); // "estm", from the first position to the one at the end.

C'est beaucoup plus pratique que l'étrange sous-chaîne logique.

Une valeur négative du premier paramètre sur substr supporté par tous les navigateurs sauf IE8-.

Si le choix de l'une de ces trois méthodes, pour une utilisation dans la plupart des situations - ce seraslice: arguments négatifs et il maintient et opère le plus évident.

9
Alexandr

La seule différence entre la méthode slice et la méthode sous-chaîne réside dans les arguments

Les deux prennent deux arguments, par exemple début/de et fin/à.

Vous ne pouvez pas passer une valeur négative en tant que premier argument de la méthode substring mais à la méthode slice de la parcourir de la fin.

Détails de l'argument de la méthode Slice:

REF: http://www.thesstech.com/javascript/string_slice_method

Arguments

start_index Index à partir duquel la tranche doit commencer. Si la valeur est fournie en négatif, cela signifie qu'il faut commencer par le dernier. par exemple. -1 pour le dernier caractère .end_index Index après la fin de la tranche. Si non fourni, la tranche sera prise de start_index à la fin de la chaîne. En cas de valeur négative, l'indice sera mesuré à partir de la fin de la chaîne.

Détails des arguments de la méthode de sous-chaîne:

REF: http://www.thesstech.com/javascript/string_substring_method

Arguments

de Il doit s'agir d'un entier non négatif pour spécifier l'index à partir duquel la sous-chaîne doit commencer .à Un entier non négatif facultatif permettant de fournir un index avant la chaîne suivante devrait être fini.

2
Sohail Arif

Pour slice (start, stop), si stop est négatif, stop sera défini sur: string.length - Math.abs (stop), plutôt (string.length - 1) - Math.abs (arrêt).

0
tingxuanz

substr: Cela nous permet d'extraire une partie de la chaîne en fonction de l'index spécifié. la syntaxe de substr- string.substr (début, fin) début - index début indique le début de la récupération. end-end index indique jusqu'à où la chaîne va chercher. C'est optionnel.

slice: Il permet d'extraire une partie de la chaîne en fonction de l'index spécifié. Cela nous permet de spécifier positif et index. syntaxe de slice - string.slice (début, fin) start - index index indique où le début de la récupération est effectué. L 'index end - end indique jusqu'à où la chaîne récupère. C'est optionnel. Dans 'splice', les index de début et de fin aident à prendre un index positif et un index négatif.

exemple de code pour 'slice' dans la chaîne

var str="Javatscript";
console.log(str.slice(-5,-1));

output: crip

exemple de code pour 'sous-chaîne' dans la chaîne

var str="Javatscript";
console.log(str.substring(1,5));

output: avat

[* Remarque: l'indexation négative commence à la fin de la chaîne.]

0
subham ruj