Відповіді:
Ви можете видалити перший символ рядка, використовуючи 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);
}
===
і ==
виконувати точно ті ж кроки ( в відповідності зі специфікацією, по крайней мере), так що немає ніяких підстав очікувати , один працювати краще , ніж інші .
substr
на substring
. Перевірте MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Дуже читабельним кодом є використання .substring()
з початковим набором для індексу другого символу (1) (перший символ має індекс 0). Другий параметр .substring()
методу насправді необов’язковий, тому вам навіть не потрібно дзвонити .length()
...
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 не знаходяться.
Використовуйте .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 );
Ви спробували substring
функцію?
string = string.indexOf(0) == '0' ? string.substring(1) : string;
Ось посилання - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substring
І ви завжди можете це зробити для декількох 0:
while(string.indexOf(0) == '0')
{
string = string.substring(1);
}
var s = "0test";
if(s.substr(0,1) == "0") {
s = s.substr(1);
}
Для всіх 0
s: http://jsfiddle.net/An4MY/
String.prototype.ltrim0 = function() {
return this.replace(/^[0]+/,"");
}
var s = "0000test".ltrim0();
charAt
? Чому дужки? Чому розширення прототипу? Гидота.
//---- 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));
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);
Ось один, який не припускає, що вхід є string
, використовує substring
і поставляється з парою одиничних тестів:
var cutOutZero = function(value) {
if (value.length && value.length > 0 && value[0] === '0') {
return value.substring(1);
}
return value;
};
Від реалізації 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,'');
}
}
charAt
завжди повертає рядок, навіть якщо індекс перевищує індекс останнього символу, тому не виконується примус типу, і алгоритм виявляється ідентичним. Але я вважаю===
за краще,==
навіть якщо це не має значення. ;)