JavaScriptの文字列の最初の文字を削除する


505

文字列の最初の文字が0の場合、最初の文字を削除したいのですが、0は複数回存在できます。

最初の文字をチェックしてそれが0の場合は削除する単純な関数はありますか?

現時点では、JS slice()関数を使って試していますが、非常に扱いにくいです。

回答:


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インデックスが最後の文字のインデックスを超えても常に文字列を返すため、型の強制は行われず、アルゴリズムが同じになるため、違いはありません。しかし、私は好きです===以上==、それは違いを作るていない場合であっても。;)
user113716 2011年

4
@Hejner:彼らは常に、その後、この場合にも同じようなタイプは、同じである場合=====(少なくとも、仕様に応じて)正確に同じ手順を実行しますので、他よりも良好に機能するものを期待する理由はありません。
Tim Down

2
@MiguelCoder。仕様によると、手順は同じです(もちろん、ブラウザーの実装は異なる場合があります)。あなたが私を信じないならそれを読んでください。
Tim Down

3
@ReallyNiceCodeは、質問が8年以上前に行われたという事実を脇に置いています。「0は複数回存在する可能性がある」と述べられています。そして、質問者は私の解決策を受け入れました。
影付きの

6
まだ有効ますが、交換することにより、お返事を更新する必要がありますsubstrsubstring。:MDNチェックdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
ソウルリーバー

186

非常に読みやすいコードは.substring()、開始文字を2番目の文字(1)のインデックスに設定して使用することです(最初の文字のインデックスは0です)。.substring()メソッドの2番目のパラメーターは実際にはオプションであるため、呼び出す必要もありません.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()vs .substring()vs.substr()

以下からの引用(多くの点での)String.sliceとString.substringの違いは何ですか?

また、スライスするパラメータが負の場合、最後から文字列を参照することも指摘しています。Substringとsubstrにはありません。


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

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のs:http : //jsfiddle.net/An4MY/

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

ええ、文字列に0が1つしかない場合はこれでうまくいきます。しかし、文字列がvar s = "00test0"のように見える場合にも必要です。その後、最初の2つの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

文字列からスペースを削除し、先頭または末尾のスペースを削除するtrim()>のJavascript実装から。この質問に対する回答の変更された実装を次に示します。

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関数実装のこの変更された採用の必要な理解を、元の質問への回答として処理することができません。
フィノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.