Подтвердить что ты не робот

Определить конкретный символ строки из строки

Что эквивалентно JavaScript для этого метода C#:

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

С# обрезает выделенный символ только с начало и конец строки!

4b9b3361

Ответ 1

Достаточно одной строки:

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

Ответ 2

Если я правильно понял, вы хотите удалить определенный символ, только если он находится в начале или в конце строки (например: ||fo||oo|||| должно стать foo||oo). Вы можете создать специальную функцию следующим образом:

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

Я проверил эту функцию с кодом ниже:

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

Ответ 3

Вы можете использовать регулярное выражение, например:

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

UPDATE:

Если вы хотите обобщить это на функцию, вы можете сделать следующее:

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

Ответ 4

чтобы этот вопрос обновился:

вот подход, который я бы выбрал над функцией regex с помощью оператора распространения 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);
}

Ответ 5

Это может обрезать несколько символов за раз:

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

Ответ 6

Regex кажется слишком сложным для такой простой задачи, как Trim?

С#

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

Javascript, пример x.TrimLeft('|') - простой (но обрезает только один символ)

var ltrim = "|";
var x = "|f|oo||";
var y = (x.startsWith(ltrim) ? x.substring(ltrim.length) : x); // "f|oo||"

var result = y;
console.log(y);

Ответ 7

Версия без регулярных выражений, которая легка на глаз:

const trim = (str, chars) => str.split(chars).filter(Boolean).join(chars);

Для случаев использования, где мы уверены, что нет повторения символов по краям.

Ответ 8

Если вы имеете дело с более длинными строками, я считаю, что это должно превзойти большинство других опций, уменьшив количество выделенных строк до нуля или единицы:

function trim(str, ch) {
    var start = 0, 
        end = str.length;

    while(start < end && str[start] === ch)
        ++start;

    while(end > start && str[end - 1] === ch)
        --end;

    return (start > 0 || end < str.length) ? str.substring(start, end) : str;
}

// Usage:
trim('|hello|world|', '|'); // => 'hello|world'

Или, если вы хотите обрезать из набора нескольких символов:

function trimAny(str, chars) {
    var start = 0, 
        end = str.length;

    while(start < end && chars.indexOf(str[start]) >= 0)
        ++start;

    while(end > start && chars.indexOf(str[end - 1]) >= 0)
        --end;

    return (start > 0 || end < str.length) ? str.substring(start, end) : str;
}

// Usage:
trimAny('|hello|world   ', [ '|', ' ' ]); // => 'hello|world'
// because '.indexOf' is used, you could also pass a string for the 2nd parameter:
trimAny('|hello| world  ', '| '); // => 'hello|world'

Ответ 9

Этот обрезает все лидирующие и конечные делиметры

const trim = (str, delimiter) => {
  const pattern = '[^\\${delimiter}]';
  const start = str.search(pattern);
  const stop = str.length - str.split('').reverse().join('').search(pattern);
  return str.substring(start, stop);
}

const test = '||2|aaaa12bb3ccc|||||';
console.log(trim(test, '|')); // 2|aaaa12bb3ccc

Ответ 10

Насколько я знаю, jQuery не имеет встроенной функции, о которой вы спрашиваете. Однако с помощью javascript вы можете просто использовать replace для изменения содержимого вашей строки:

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

Это заменит все вхождения | ничего.

Ответ 11

развивая ответ @leaf, здесь можно взять несколько символов:

var trim = function (s, t) {
  var tr, sr
  tr = t.split('').map(e => '\\\\${e}').join('')
  sr = s.replace(new RegExp('^[${tr}]+|[${tr}]+$', 'g'), '')
  return sr
}

Ответ 12

Мне нравится решение от @Pho3niX83...

Давайте расширим это словом "слово" вместо "символ"...

function trimWord(_string, _word) {

    var splitted = _string.split(_word);

    while (splitted.length && splitted[0] === "") {
        splitted.shift();
    }
    while (splitted.length && splitted[splitted.length - 1] === "") {
        splitted.pop();
    }
    return splitted.join(_word);
};

Ответ 13

Я бы посоветовал взглянуть на lodash и на то, как они реализовали функцию trim.

См. Lodash Trim для документации и источника, чтобы увидеть точный код, который выполняет обрезку.

Я знаю, что это не дает точного ответа на ваш вопрос, но я думаю, что было бы хорошо установить ссылку на библиотеку по такому вопросу, поскольку другие могут посчитать это полезным.

Ответ 14

function trim(text, val) {
    return text.replace(new RegExp('^'+val+'+|'+val+'+$','g'), '');
}

Ответ 15

Попробуйте этот метод:

var a = "anan güzel mi?";
if (a.endsWith("?"))   a = a.slice(0, -1);  
document.body.innerHTML = a;

Ответ 16

попробовать:

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

Ответ 17

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

Ответ 18

Попробуйте следующее:

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