자바 스크립트에서 문자열의 첫 문자 삭제


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

4
@ Hejner : 유형이 항상이 경우 =====동일하면 정확히 동일한 단계를 수행하고 (적어도 사양에 따르면) 다른 단계보다 더 나은 성능을 기대할 이유가 없습니다. .
Tim Down

2
@MiguelCoder. 사양에 따르면 단계는 동일합니다 (브라우저 구현은 물론 다를 수 있음). 당신이 나를 믿지 않으면 읽어보십시오.
팀 다운

3
@ReallyNiceCode는 질문이 8 년 전에 제기되었다는 사실을 제쳐두고 있습니다. "0은 두 번 이상있을 수 있습니다"라고 명시되어 있습니다. 그리고 asker는 나의 해결책을 받아 들였다.
Shaded

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()vs .substring()vs.substr()

에서 (및 더 많은 것을에) 견적 String.slice과 String.substring의 차이점은 무엇입니까?

또한 슬라이스 할 매개 변수가 음수이면 끝에서부터 문자열을 참조한다고 지적합니다. 하위 문자열과 하위 문자열은 그렇지 않습니다.


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

모든 선행을 제거하는 가장 쉬운 방법 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이 하나만 있으면 작동합니다. 그러나 String이 다음과 같은 경우에도 필요합니다. 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

다음은 입력이 a string, uses 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.