2009-11-10 11 views
17

Say, j'ai une chaînedécouper une partie d'une chaîne

"hello is it me you're looking for" 

Je veux couper une partie de cette chaîne et retourner la nouvelle chaîne, quelque chose comme

s = string.cut(0,3); 

s serait maintenant égal à:

"lo is it me you're looking for" 

EDIT: Il ne peut pas être de 0 à 3. Il pourrait être de 5 à 7.

s = string.cut(5,7); 

reviendriez

"hellos it me you're looking for" 
+0

curiosité ... la méthode String.substr() semble fonctionner pour la plupart des scénarios que je rencontre - mais vous semblez avoir besoin d'enlever un peu de chaîne « moyenne » - avez-vous un échantillon «vrai monde» cas où cela se produit régulièrement? – scunliffe

+0

Pourquoi ne pas couper 0-2 et 5-6 à la place? – dlamblin

Répondre

27

Vous y êtes presque. Ce que vous voulez est:

http://www.w3schools.com/jsref/jsref_substr.asp

Ainsi, dans votre exemple:

Var string = "hello is it me you're looking for"; 
s = string.substr(3); 

En ne fournissant un début (la première arg) prend de cet indice à la fin de la chaîne.

mise à jour, que diriez-vous quelque chose comme:

function cut(str, cutStart, cutEnd){ 
    return str.substr(0,cutStart) + str.substr(cutEnd+1); 
} 
+1

Cette fonction a un problème avec les sauts de ligne, je suggère d'utiliser la sous-chaîne et non sous comme indiqué ci-dessous return this.substring (0, cutStart) + this.substring (cutEnd); –

3

String.substring() est ce que vous voulez.

6

utilisation

substring

fonction

Renvoie un sous-ensemble d'une chaîne entre une index et un autre, ou à travers l'extrémité de la chaîne.

substring(indexA, [indexB]); 

indexA

An integer between 0 and one less than the length of the string. 

indexB (en option) un nombre entier compris entre 0 et la longueur de la chaîne. La sous-chaîne extrait les caractères d'indexA jusqu'à indexB, mais ne les inclut pas. En particulier:

* If indexA equals indexB, substring returns an empty string. 
* If indexB is omitted, substring extracts characters to the end 
    of the string. 
* If either argument is less than 0 or is NaN, it is treated as if 
    it were 0. 
* If either argument is greater than stringName.length, it is treated as 
    if it were stringName.length. 

Si indexA est plus grand que indexB, l'effet de sous-chaîne est comme si les deux arguments ont été échangés; par exemple, str.substring (1, 0) == str.substring (0, 1).

0

les opérations suivantes:

var str="hello is it me you're looking for"; 
document.write(str.substring(3)+"<br />"); 

Vous pouvez vérifier this link

4
s = string.cut(5,7); 

Je préfère le faire en fonction séparée, mais si vous voulez vraiment être en mesure d'appeler directement sur une chaîne du prototype:

String.prototype.cut= function(i0, i1) { 
    return this.substring(0, i0)+this.substring(i1); 
} 
+0

Ceci est-il javascript? sous-chaîne – user956584

1

Juste comme référence pour n'importe qui recherchant la fonction semblable, j'ai un String.prot la mise en œuvre otype.bisect qui divise une chaîne de 3 façons en utilisant une expression régulière/delimiter chaîne et renvoie l'avant, delimiter match et après les parties de la chaîne ....

/* 
     Splits a string 3-ways along delimiter. 
     Delimiter can be a regex or a string. 
     Returns an array with [before,delimiter,after] 
*/ 
String.prototype.bisect = function(delimiter){ 
    var i,m,l=1; 
    if(typeof delimiter == 'string') i = this.indexOf(delimiter); 
    if(delimiter.exec){ 
    m = this.match(delimiter); 
    i = m.index; 
    l = m[0].length 
    } 
    if(!i) i = this.length/2; 
    var res=[],temp; 
    if(temp = this.substring(0,i)) res.push(temp); 
    if(temp = this.substr(i,l)) res.push(temp); 
    if(temp = this.substring(i+l)) res.push(temp); 
    if(res.length == 3) return res; 
    return null; 
}; 

/* though one could achieve similar and more optimal results for above with: */ 

"my string to split and get the before after splitting on and once".split(/and(.+)/,2) 

// outputs => ["my string to split ", " get the before after splitting on and once"] 

Comme indiqué ici: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/split

Si le séparateur est une expression régulière qui contient des parenthèses de capture, alors chaque séparateur de temps est mis en correspondance les résultats (y compris les résultats indéfinis) des parenthèses de capture sont épissés dans le tableau de sortie. Cependant, tous les navigateurs ne prennent pas en charge cette fonctionnalité.

2

D'autres alternatives plus modernes sont:

  1. Split et rejoindre

    function cutFromString(oldStr, fullStr) { 
        return fullStr.split(oldStr).join(''); 
    } 
    cutFromString('there ', 'Hello there world!'); // "Hello world!" 
    

    Adapté de MDN example

  2. String.replace(), qui utilise regex. Cela signifie qu'il peut être plus flexible avec la sensibilité à la casse.

    function cutFromString(oldStrRegex, fullStr) { 
        return fullStr.replace(oldStrRegex, ''); 
    } 
    cutFromString(/there /i , 'Hello THERE world!'); // "Hello world!" 
    
Questions connexes