2009-11-10 20 views
17

Di ', ho una stringa ditagliare parte di una stringa

"hello is it me you're looking for" 

voglio tagliare una parte di questa stringa e restituire la nuova stringa, qualcosa come

s = string.cut(0,3); 

s ora sarebbe pari a:

"lo is it me you're looking for" 

EDIT: Esso non può essere da 0 a 3. Si potrebbe essere da 5 a 7.

s = string.cut(5,7); 

sarebbe tornare

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

Solo per curiosità ... lo String.substr() il metodo sembra funzionare per la maggior parte degli scenari che incontro - ma ti sembra di avere la necessità di rimuovere un "middle" bit stringa - hai un assaggiare il caso del "mondo reale" in cui ciò avviene regolarmente? – scunliffe

+0

Perché non dovresti tagliare 0-2 e 5-6? – dlamblin

risposta

27

Sei quasi arrivato. Quello che vuoi è:

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

Quindi, nel tuo esempio:

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

a fornire solo l'inizio (il primo arg) prende da quella dell'indice alla fine della stringa.

Update, come su qualcosa di simile:

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

Questa funzione ha un problema con le interruzioni di riga, suggerisco di usare la sottostringa e non il substrato come consigliato qui sotto return this.substring (0, cutStart) + this.substring (cutEnd); –

3

string.substring() è quello che volete.

6

Uso

substring

funzione

restituisce un sottoinsieme di una stringa tra un indice e l'altro, o attraverso il fine della stringa.

substring(indexA, [indexB]); 

INDEXA

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

indiceB, specificati (facoltativo) Un numero intero tra 0 e la lunghezza della stringa.

La sottostringa estrae caratteri dall'indiceA fino a ma non incluso l'indiceB. In particolare:

* 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. 

Se INDEXA è maggiore di indiceB, specificati, allora l'effetto di stringa è come se sono stati scambiati i due argomenti; ad esempio, str.substring (1, 0) == str.substring (0, 1).

0

provare quanto segue:

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

È possibile controllare this link

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

preferisco farlo come una funzione separata, ma se si vuole davvero essere in grado di chiamare direttamente su una stringa dal prototipo:

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

Questo è javascript? sottostringa – user956584

1

Proprio come un punto di riferimento per chi cerca funzione simile, ho uno String.prot otype.bisect implementazione che divide una stringa a 3 vie con una regex/delimitatore di stringa e restituisce la prima, delimitatore-partita e dopo parti della stringa ....

/* 
     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"] 

Come detto qui: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/String/split

Se separatore è un'espressione regolare che contiene parentesi di acquisizione, quindi ogni separatore di tempo viene confrontato, i risultati (inclusi eventuali risultati non definiti) delle parentesi di acquisizione vengono uniti nell'array di output. Tuttavia, non tutti i browser supportano questa funzionalità.

2

Alcune altre alternative più moderne sono:

  1. dividere e unire

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

    adattati da MDN example

  2. String.replace(), che utilizza espressioni regolari. Ciò significa che può essere più flessibile con la distinzione tra maiuscole e minuscole.

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