2014-10-02 11 views
31

Jaka jest JavaScript równoważne z niniejszym C# Metoda:trymowania specyfika z ciągiem

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

C# przycina wybrany znak tylko w zaczynają i koniec łańcucha!

Odpowiedz

32

Jedna linia jest wystarczająco  :

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 

W zależności  :

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

Według mojej wiedzy, jQuery nie ma wbudowanej funkcji, o którą pyta. z JavaScript jednak można po prostu użyć zastąpić, aby zmienić treść swojej wyrażenie:

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

ten zastąpi wszystkich wystąpień | z niczym.

+0

czy istnieje sposób, aby usunąć | tylko na początku/końcu? – fubo

+0

Właściwie uważam, że ten post sprawi, że będziesz na bieżąco z pytaniem: http://stackoverflow.com/questions/20196088/jquery-remove-first-and-last-character-of-string –

+0

@fubo Sure. .. Wrzuć '$' jak to tylko na końcu: '" || spam ||| ".replace (/ \ | + $/g," ")' lub '^' jak to tylko na początek : '" || spam ||| ".replace (/^\ | +/g," ")' – ruffin

0

try:

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

Jeśli dobrze zrozumiałem, chcesz usunąć specyficzny charakter wyłącznie wtedy, gdy znajduje się na początku lub na końcu łańcucha (ex: „fo || || oo | ||| "powinno stać się" foo || oo "). Można utworzyć funkcję ad hoc, co następuje:

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; 
} 

Przetestowałem tę funkcję z poniższym kodzie:

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

można użyć wyrażenia regularnego takie jak:

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

AKTUALIZACJA:

Jeśli chcesz uogólnić tę int O funkcji, można wykonać następujące czynności:

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

Spróbuj tego:

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

działa tylko tak długo, jak ciąg 'x' nie zmienia się – fubo

5

utrzymać to pytanie na bieżąco:

tutaj jest podejście chciałbym wybrać na funkcję regex przy użyciu operatora spread 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

Można przyciąć kilka znaków na raz:

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: Nie, niezupełnie. To jest wersja demonstracyjna, jeśli wkleisz ją do konsoli, po prostu wydrukuje wynik. Rozumiem, że może to być mylące, więc je zredagowałem. – 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

Usuwa tylko jedno wystąpienie, ale nie przycina, dopóki postać nie jest w pełni przycięta – KoalaBear