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

506

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

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

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

Jings
источник

Ответы:

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 не имеют.

jave.web
источник
84

Используйте .charAt()и .slice().

Пример: http://jsfiddle.net/kCpNQ/

var myString = "0String";

if( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );

Если может быть несколько 0символов в начале, вы можете изменить if()к while().

Пример: http://jsfiddle.net/kCpNQ/1/

var myString = "0000String";

while( myString.charAt( 0 ) === '0' )
    myString = myString.slice( 1 );
user113716
источник
61

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

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

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

s = s.replace(/^0/, "");
Тим Даун
источник
26

Вы можете сделать это с помощью метода подстроки :

let a = "My test string";

a = a.substring(1);

console.log(a); // y test string
Эндрю
источник
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();
zsalzbank
источник
Да, это будет работать, если в строке будет только один 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));
bambolobred
источник
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);

ChaosPandion
источник
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/

bdukes
источник
0
var test = '0test';
test = test.replace(/0(.*)/, '$1');
kelloti
источник
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 в качестве ответа на исходный вопрос.
фин