Удалить первый символ строки в Javascript


506

Я хочу удалить первый символ строки, если первый символ равен 0. 0 может быть там более одного раза.

Есть ли простая функция, которая проверяет первый символ и удаляет его, если он равен 0?

Прямо сейчас я пробую это с slice()функцией JS, но это очень неудобно.

Ответы:


764

Вы можете удалить первый символ строки, используя substr:

var s1 = "foobar";
var s2 = s1.substr(1);
alert(s2); // shows "oobar"

Чтобы удалить все 0 в начале строки:

var s = "0000test";
while(s.charAt(0) === '0')
{
 s = s.substr(1);
}

11
@Stephen: В этом случае это не будет иметь значения, потому что charAtвсегда возвращает строку, даже если индекс превышает индекс последнего символа, поэтому не выполняется приведение типов, и алгоритм в итоге оказывается идентичным. Но я предпочитаю ===более , ==даже если он не делает разницы. ;)
user113716

4
@Hejner: Если типы одинаковы, как они всегда были бы в этом случае, то ===и ==выполняйте точно такие же шаги (в соответствии со спецификацией, по крайней мере), поэтому нет никаких оснований ожидать, что один будет работать лучше, чем другой ,
Тим Даун

2
@MiguelCoder. Согласно спецификации, шаги одинаковы (реализации браузера, конечно, могут отличаться). Прочтите это, если вы мне не верите.
Тим Даун

3
@ReallyNiceCode, оставляя в стороне тот факт, что вопрос был задан более 8 лет назад. Было заявлено: «0 может быть там более одного раза». и спрашивающий принял мое решение.
затушеванный

6
Хотя он по-прежнему действителен, вы должны обновить свой ответ, заменив substrна substring. Проверьте MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Soul Reaver

187

Очень удобочитаемый код, который нужно использовать .substring()с начальным значением индекса второго символа (1) (первый символ имеет индекс 0). Второй параметр .substring()метода на самом деле является необязательным, поэтому вам даже не нужно вызывать .length()...

TL; DR: удалить первый символ из строки:

str = str.substring(1);

...Да, это так просто...

Удаление некоторых персонажей:

Как предложил @Shaded, просто зациклите это, в то время как первый символ вашей строки является «нежелательным» символом ...

var yourString = "0000test";
var unwantedCharacter = "0";
//there is really no need for === check, since we use String's charAt()
while( yourString.charAt(0) == unwantedCharacter ) yourString = yourString.substr(1);
//yourString now contains "test"

.slice()против .substring()против.substr()

Цитата (и больше об этом в) В чем разница между String.slice и String.substring?

Он также указывает, что если параметры для среза отрицательны, они ссылаются на строку с конца. Substring и substr не имеют.



61

Самый простой способ удалить все ведущие 0буквы:

var s = "00test";
s = s.replace(/^0+/, "");

Если просто удалить один ведущий 0символ, как следует из вопроса, вы можете использовать

s = s.replace(/^0/, "");



7
var s = "0test";
if(s.substr(0,1) == "0") {
    s = s.substr(1);
}

Для всех 0: http://jsfiddle.net/An4MY/

String.prototype.ltrim0 = function() {
 return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();

Да, это будет работать, если в строке будет только один 0. Но мне это нужно также, если строка выглядит как var s = "00test0"; тогда только первые два 0 должны были быть заменены
Jings

1
Почему нет charAt? Почему скобки? Почему расширение прототипа? Тьфу.
Ry-

6
//---- remove first and last char of str    
str = str.substring(1,((keyw.length)-1));

//---- remove only first char    
str = str.substring(1,(keyw.length));

//---- remove only last char    
str = str.substring(0,(keyw.length));

4

String.prototype.trimStartWhile = function(predicate) {
    if (typeof predicate !== "function") {
    	return this;
    }
    let len = this.length;
    if (len === 0) {
        return this;
    }
    let s = this, i = 0;
    while (i < len && predicate(s[i])) {
    	i++;
    }
    return s.substr(i)
}

let str = "0000000000ABC",
    r = str.trimStartWhile(c => c === '0');
    
console.log(r);


3

Вот тот, который не предполагает, что ввод является string, использует substringи поставляется с парой модульных тестов:

var cutOutZero = function(value) {
    if (value.length && value.length > 0 && value[0] === '0') {
        return value.substring(1);
    }

    return value;
};

http://jsfiddle.net/TRU66/1/



0
var test = '0test';
test = test.replace(/0(.*)/, '$1');

2
Это не работает, как ожидалось, а также действительно неэффективно.
Ry-

0

Из реализации JavaScript (trim>), которая удаляет начальные или конечные пробелы из строк. Вот измененная реализация ответа на этот вопрос.

var str = "0000one two three0000"; //TEST  
str = str.replace(/^\s+|\s+$/g,'0'); //ANSWER

Оригинальная реализация для этого на JS

string.trim():
if (!String.prototype.trim) {
 String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,'');
 }
}

мы не рассматриваем путаницу как проблему реализации, однако она часто связана с недостатком потенциала, чтобы не совпадать с переменными, которые предоставляет вам ваша среда. В этом случае ваши нейронные связи не в состоянии обработать необходимое понимание этого измененного принятия нативной реализации функции js в качестве ответа на исходный вопрос.
фин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.