2010-09-07 7 views
4

J'ai une chaîneComment implémenter un "EndsWith" sur une chaîne?

var s1 = "a,$,b,c"; 

Je veux vérifier si une autre chaîne se termine par s1

Donc, si je vous envoie ces chaînes, il doit retourner true

w,w,a,$,b,c 
^,^,^,$,@,#,%,$,$,a,$,b,c 
a,w,e,q,r,f,z,x,c,v,z,$,W,a,$,b,c 

Et pour ces false

a,$,b,c,F,W 
a,$,b,c,W 
a,$,b,c,$,^,\,/ 

Comment puis-je vérifier?

+0

Voir http: // stackoverflow .com/questions/280634/endswith-in-javascript –

Répondre

10
if (str.slice(-s1.length) == s1) { 
} 

Ou, moins dynamique et plus littéralement:

if (str.slice(-7) == s1) { 
} 

L'utilisation d'un décalage négatif pour tranche() fixe le point de départ de la fin de la chaîne, moins le début négatif - dans ce cas, 7 caractères (ou s1.length) à partir de la fin.

slice() - MDC

L'ajout de ce au prototype de chaîne est facile:

String.prototype.endsWith = function (str) { 
    return this.slice(-str.length) === str; 
} 

alert("w,w,a,$,b,c".endsWith(s1)); 
// -> true 
+0

Vous devriez probablement utiliser la comparaison d'identité '===' dans une amélioration prototype. – Tomalak

+1

@Tomalak: Fait, je suppose que si vous passiez dans un tableau comme argument str, cela ferait une différence. –

1

obtenir la longueur de la chaîne s1, puis obtenir la sous-chaîne des derniers chiffres de la chaîne de test et voir si elles sont les même.

Comme ceci:

if (s2.substring(s2.length - s1.length) == s1) 
+0

Quel navigateur avez-vous testé? '' abc '.substring (-1) 'ne fonctionne pas sur Firefox – BrunoLM

+0

@BurnoLM Je suppose que j'étais habitué à la façon dont PHP le fait, ma mise à jour devrait fonctionner. –

5

Cela va ajouter une méthode endsWith de type Java à cordes:

String.prototype.endsWith = function(suffix) { 
    if (this.length < suffix.length) 
     return false; 
    return this.lastIndexOf(suffix) === this.length - suffix.length; 
} 

Vous pouvez alors faire:

"w,w,a,$,b,c".endsWith(s1) //true 
+0

+1 Je stockerai 'this.length-suffix.length' dans une variable' l', puis retournerai sur une ligne: 'return l> = 0 && this.lastIndexOf (suffixe) === l;' – Tomalak

Questions connexes