[javascript] Javascript를 사용하여 문자열에서 문자를 제거하려면 어떻게해야합니까?

나는 이것을 얻는 것에 너무 가깝지만, 옳지 않다. 내가하고 싶은 r것은 문자열 에서 문자 를 제거하는 것 입니다. 문제는 r문자열에 인스턴스가 두 개 이상 있다는 것입니다 . 그러나 항상 인덱스 4의 문자 (5 번째 문자)입니다.

문자열 예 : crt/r2002_2

내가 원하는 것 : crt/2002_2

이 교체 기능은 모두 제거 r

mystring.replace(/r/g, '')

생산 : ct/2002_2

나는이 기능을 시도했다 :

String.prototype.replaceAt = function (index, char) {
    return this.substr(0, index) + char + this.substr(index + char.length);
}
mystring.replaceAt(4, '')

다른 문자로 바꾸면 작동합니다. 단순히 제거하지는 않습니다.

이견있는 사람?



답변

var mystring = "crt/r2002_2";
mystring = mystring.replace('/r','/');

/r/사용하여 대체 String.prototype.replace합니다.

또는 정규식을 전역 플래그와 함께 사용하여 ( 아래 Erik Reppen & Sagar Gala가 제안한 대로) 모든 발생을

mystring = mystring.replace(/\/r/g, '/');

편집 :
모든 사람의 너무 여기에 재미와 가진 이후 user1293504을 가 곧 명확한 질문에 대답하기 위해 다시 오는 것처럼 보이지 않기 때문에 다음은 문자열에서 N 번째 문자를 제거하는 방법입니다.

String.prototype.removeCharAt = function (i) {
    var tmp = this.split(''); // convert to an array
    tmp.splice(i - 1 , 1); // remove 1 element from the array (adjusting for non-zero-indexed counts)
    return tmp.join(''); // reconstruct the string
}

console.log("crt/r2002_2".removeCharAt(4));

user1293504는 인덱스가없는 카운트 대신 일반 카운트를 사용했기 때문에 인덱스에서 1을 제거해야합니다.이를 사용하여 charAt작품이 세 번째 라인의 인덱스에서 1을 빼지 tmp.splice(i, 1)않고 대신 사용 하는 방법을 복제하려면이를 사용하십시오 .


답변

간단한 기능적인 자바 스크립트 방식은

mystring = mystring.split('/r').join('/')

간단하고 빠르며 전 세계를 대체하며 기능이나 프로토 타입이 필요 없습니다.


답변

항상 네 번째 문자를 제거한다는 것을 알고 있다면 항상 문자열 함수가 있습니다.

str.slice(0, 4) + str.slice(5, str.length))


답변

첫 번째 기능은 거의 옳습니다. ‘global'(편집)을 나타내는 ‘g’플래그를 제거하고 두 번째 ‘r’을 발견 할 수있는 컨텍스트를 제공하십시오.

편집 : 그것이 ‘/’를 추가하기 전에 두 번째 ‘r’인 것을 보지 못했습니다. regEx 인수를 사용할 때 ‘/’를 이스케이프하려면 \ /가 필요합니다. upvotes에 감사하지만 잘못되었으므로 regEx의 기본 사항을 더 잘 이해하는 데 관심이있는 사람들을 위해 세부 정보를 수정하고 추가 할 수 있지만 다음과 같이 작동합니다.

mystring.replace(/\/r/, '/')

과도한 설명이 필요합니다 :

regEx 패턴을 읽거나 쓸 때 <문자 또는 문자 집합>과 <문자 또는 문자 집합>, <…

regEx에서 <문자 또는 문자 집합>은 한 번에 하나씩 일 수 있습니다.

/each char in this pattern/

따라서 e, a, c 등을 읽으십시오.

또는 단일 <문자 또는 문자 집합>은 문자 클래스로 설명되는 문자 일 수 있습니다.

/[123!y]/
//any one of these
/[^123!y]/
//anything but one of the chars following '^' (very useful/performance enhancing btw)

또는 많은 문자와 일치하도록 확장되었지만 (순차적 패턴 측면에서 단일 요소로 생각하는 것이 가장 좋습니다) :

/a{2}/
//precisely two 'a' chars - matches identically as /aa/ would

/[aA]{1,3}/
//1-3 matches of 'a' or 'A'

/[a-zA-Z]+/
//one or more matches of any letter in the alphabet upper and lower
//'-' denotes a sequence in a character class

/[0-9]*/
//0 to any number of matches of any decimal character (/\d*/ would also work)

따라서 무리를 함께 스무시하십시오.

   var rePattern = /[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/g
   var joesStr = 'aaaAAAaaEat at Joes123454321 or maybe aAaAJoes all you can   eat098765';

   joesStr.match(rePattern);

   //returns ["aaaAAAaaEat at Joes123454321", "aAaAJoes all you can eat0"]
   //without the 'g' after the closing '/' it would just stop at the first   match and return:
   //["aaaAAAaaEat at Joes123454321"]

그리고 물론 과도하게 설명했지만 내 요점은 간단히 다음과 같습니다.

/cat/

일련의 3 가지 패턴 요소 (물건 뒤에 물건이옵니다).

그리고 이것도 :

/[aA]{4,8}(Eat at Joes|Joes all you can eat)[0-5]+/

regEx가 엉뚱 해 보일 때마다 일련의 것들 (잠재적으로 다중 문자 것들)로 차례로 나뉩니다. 일종의 기본 요점이지만 과거에 시간이 걸리기 때문에 여기에서 설명을 진행했습니다 .regEx를 처음 접하는 OP 및 다른 사람들이 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 것이라고 생각합니다. 정규식 읽기 / 쓰기의 핵심은이를 여러 부분으로 나누는 것입니다.


답변

‘/ r’의 전역 대체를 위해이 코드가 효과적이었습니다.

mystring = mystring.replace(/\/r/g,'');


답변

그냥 고쳐 replaceAt:

String.prototype.replaceAt = function(index, charcount) {
  return this.substr(0, index) + this.substr(index + charcount);
}

mystring.replaceAt(4, 1);

removeAt대신 전화하겠습니다 . 🙂


답변

return this.substr(0, index) + char + this.substr(index + char.length);

char.length0입니다. 1이 경우 문자를 건너 뛰 려면 추가해야합니다 .