2014-10-02 14 views
31

Qual è il JavaScript equivalente a questo C# Metodo:Trim carattere specifico da una stringa

var x = "|f|oo||"; 
var y = x.Trim('|'); // "f|oo" 

C# rifila il carattere selezionato solo alla inizio e fine della stringa!

risposta

32

Una linea è abbastanza  :

var x = '|f|oo||'; 
 
var y = x.replace(/^\|+|\|+$/g, ''); 
 
document.write(x + '<br />' + y);

^\|+ beginning of the string, pipe, one or more times 
|  or 
\|+$ pipe, one or more times, end of the string 

In una funzione  :

function trim (s, c) { 
 
    if (c === "]") c = "\\]"; 
 
    if (c === "\\") c = "\\\\"; 
 
    return s.replace(new RegExp(
 
    "^[" + c + "]+|[" + c + "]+$", "g" 
 
), ""); 
 
} 
 

 
s = ".foo..oo..."; 
 
console.log(s, "->", trim(s, ".")); 
 
s = "|foo||oo|||"; 
 
console.log(s, "->", trim(s, "|")); 
 
s = "]foo]]oo]]]"; 
 
console.log(s, "->", trim(s, "]")); 
 
s = "\\foo\\\\oo\\\\\\"; 
 
console.log(s, "->", trim(s, "\\"));

1

Per quanto ne so, jQuery non ha una funzione incorporata nel metodo che stai chiedendo. con JavaScript tuttavia, si può semplicemente utilizzare sostituzione per modificare il contenuto della stringa:

x.replace(/|/i, "")); 

Questo sostituirà tutte le occorrenze di | con niente.

+0

c'è un modo per rimuovere | solo all'inizio/fine? – fubo

+0

Penso davvero che questo post ti darà il massimo sulla tua domanda: http://stackoverflow.com/questions/20196088/jquery-remove-first-and-last-character-of-string –

+0

@fubo Certo. .. Getta un '$' come questo solo alla fine: '" || spam ||| ".replace (/ \ | + $/g," ")' o un '^' come questo solo all'inizio : '" || spam ||| ".replace (/^\ | +/g," ")' – ruffin

0

prova:

console.log(x.replace(/\|/g,'')); 
17

Se ho capito bene, si desidera rimuovere un carattere specifico solo se è all'inizio o alla fine della stringa (es: "|| fo || oo | ||| "dovrebbe diventare" foo || oo "). È possibile creare una funzione ad hoc, come segue:

function trimChar(string, charToRemove) { 
    while(string.charAt(0)==charToRemove) { 
     string = string.substring(1); 
    } 

    while(string.charAt(string.length-1)==charToRemove) { 
     string = string.substring(0,string.length-1); 
    } 

    return string; 
} 

Ho testato questa funzione con il codice qui sotto:

var str = "|f|oo||"; 
$("#original").html("Original String: '" + str + "'"); 
$("#trimmed").html("Trimmed: '" + trimChar(str, "|") + "'"); 
9

è possibile utilizzare un'espressione regolare come ad esempio:

var x = "|f|oo||"; 
var y = x.replace(/^[\|]+|[\|]+$/g, ""); 
alert(y); // f|oo 

AGGIORNAMENTO:

Se si desidera generalizzare questo int o una funzione, è possibile effettuare le seguenti operazioni:

var escapeRegExp = function(strToEscape) { 
    // Escape special characters for use in a regular expression 
    return strToEscape.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 
}; 

var trimChar = function(origString, charToTrim) { 
    charToTrim = escapeRegExp(charToTrim); 
    var regEx = new RegExp("^[" + charToTrim + "]+|[" + charToTrim + "]+$", "g"); 
    return origString.replace(regEx, ""); 
}; 

var x = "|f|oo||"; 
var y = trimChar(x, "|"); 
alert(y); // f|oo 
-3

Prova questa:

var x = "|f|oo||"; 
var y = x.slice(1, 5, 7); ---> y=f|oo 
+2

funziona solo se la stringa 'x' non cambia – fubo

5

per mantenere questa domanda fino ad oggi:

qui è un approccio sceglierei sulla funzione regex utilizzando l'operatore diffusione ES6.

function trimByChar(string, character) { 
    const first = [...string].findIndex(char => char !== character); 
    const last = [...string].reverse().findIndex(char => char !== character); 
    return string.substring(first, string.length - last); 
} 
2

Questo può tagliare diversi caratteri alla volta:

String.prototype.trimChars = function (c) { 
    var re = new RegExp("^[" + c + "]+|[" + c + "]+$", "g"); 
    return this.replace(re,""); 
} 

var x = "|f|oo||"; 
x = x.trimChars('|'); // f|oo 

var y = "..++|f|oo||++.."; 
y = y.trimChars('|.+'); // f|oo 

var z = "\\f|oo\\"; // \f|oo\ 

// For backslash, remember to double-escape: 
z = z.trimChars("\\\\"); // f|oo 
+0

@fubo: No, non proprio. È una demo, se la incolli in una console stamperà solo il risultato. Ma capisco che possa essere fonte di confusione, quindi l'ho modificato. – marlar

-2
String.prototype.TrimStart = function (n) { 
    if (this.charAt(0) == n) 
     return this.substr(1); 
}; 

String.prototype.TrimEnd = function (n) { 
    if (this.slice(-1) == n) 
     return this.slice(0, -1); 
}; 
+0

Rimuove solo un'occorrenza, ma non taglia fino a quando il carattere non è completamente tagliato – KoalaBear