Видаліть перший символ рядка в Javascript


505

Я хочу видалити перший символ рядка, якщо перший символ дорівнює 0. 0 може бути там більше одного разу.

Чи є проста функція, яка перевіряє перший символ і видаляє його, якщо він дорівнює 0?

Зараз я пробую це з slice()функцією JS, але це дуже незручно.

Відповіді:


763

Ви можете видалити перший символ рядка, використовуючи 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завжди повертає рядок, навіть якщо індекс перевищує індекс останнього символу, тому не виконується примус типу, і алгоритм виявляється ідентичним. Але я вважаю ===за краще, ==навіть якщо це не має значення. ;)
користувач113716

4
@Hejner: Якщо типи однакові, так як вони завжди були б в цьому випадку, то ===і ==виконувати точно ті ж кроки ( в відповідності зі специфікацією, по крайней мере), так що немає ніяких підстав очікувати , один працювати краще , ніж інші .
Тім Даун

2
@MiguelCoder. Відповідно до специфікації, кроки однакові (реалізація браузера, звичайно, може відрізнятися). Прочитайте, якщо ви мені не вірите.
Тім Даун

3
@ReallyNiceCode відміняє той факт, що питання було задано більше 8 років тому. Було зазначено, що "0 може бути там більше одного разу". і запитувач прийняв моє рішення.
Заштриховані

6
Незважаючи на те, що все ще діє, слід оновити свою відповідь, замінивши substrна substring. Перевірте MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Soul Reaver

186

Дуже читабельним кодом є використання .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()vs.substr()

Цитата з (і більше про це в) Яка різниця між String.slice і String.substring?

Він також вказує, що якщо параметри для зрізу негативні, вони посилаються на рядок з кінця. Підрядка та substr не знаходяться.


84

Використовуйте .charAt()і .slice().

Приклад: http://jsfiddle.net/kCpNQ/

var myString = "0String";

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

Якщо 0на початку може бути кілька символів, ви можете змінити if()на «a» while().

Приклад: http://jsfiddle.net/kCpNQ/1/

var myString = "0000String";

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

61

Найпростіший спосіб зняти всі провідні 0s:

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

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

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

Так, це спрацювало б, якби тільки один 0 в рядку. Але мені це потрібно також, якщо рядок виглядає як var s = "00test0"; тоді лише перші два 0 довелося замінити
Jings

1
Чому ні charAt? Чому дужки? Чому розширення прототипу? Гидота.
Ри-

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
Це не працює так, як очікувалося, а також є дійсно неефективним.
Ри-

0

Від реалізації JavaScript 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.