문자열에서 숫자를 제거하는 방법은 무엇입니까?


84

문자열에서 숫자를 제거하고 싶습니다.

questionText = "1 ding ?"

1번호와 물음표 를 바꾸고 싶습니다 ?. 임의의 숫자 일 수 있습니다. 다음 비 작동 코드를 시도했습니다.

questionText.replace(/[0-9]/g, '');

3
정확히 작동하지 않는 것은 무엇입니까? 숫자를 제거하고 있기 때문에 ...
Felix Kling

소수점도 제거해야합니까?
반딧불이

1
@Berbi이 질문은 중복되지 않습니다. 인용 된 "Replace method does't work"에는 사용자가 "문자열에서 숫자 제거"를 입력하고 검색 할 수 있도록 적절한 제목이 없습니다. 조정이 잘못되었습니다.
Gilberto Albino 2014

답변:


164

아주 가깝습니다.

questionText = questionText.replace(/[0-9]/g, '');

replace기존 문자열에서 작동하지 않으면 새 문자열을 반환합니다. 사용하려면 보관해야합니다!
마찬가지로 새 변수를 사용할 수 있습니다.

var withNoDigits = questionText.replace(/[0-9]/g, '');

한 번에 전체 자릿수 블록을 제거하는 마지막 트릭이지만 너무 멀리 갈 수 있습니다.

questionText = questionText.replace(/\d+/g, '');

교체 할 수 있습니까? & * str.replace ( "?, *", "");
kiran

작동하지 않는 경우 둘 다 교체하고 싶습니까? 그리고 * 내 문자열에 공백 포함
kiran

@kiran - 예를 들어, 그들을 탈출 기억 \?,\*,하지만 당신은 아마도합니다 /[?*]/g. 자유롭게 새로운 질문을 하나있을 때!
Kobi

11

문자열은 불변의 이유 즉, questionText.replace(/[0-9]/g, '');그것은 자신의에 않는 일을,하지만 questionText 문자열을 변경하지 않습니다. 대체 결과를 다른 String- 변수에 할당하거나 questionText 자체에 다시 할당해야합니다.

var cleanedQuestionText = questionText.replace(/[0-9]/g, '');

또는 한 번에 (사용 \d+, Kobi의 답변 참조) :

 questionText = ("1 ding ?").replace(/\d+/g,'');

그리고 당신이 그것에있는 동안 선행 (및 후행) 공백을 자르려면 :

 questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');

/g모든 정규식을 잊지 마세요 -JavaScript는 그런 식으로 짜증나게합니다:)
Kobi

9

당신은 매우 가깝습니다.

질문에 작성한 코드는 다음과 같습니다.

questionText.replace(/[0-9]/g, '');

작성한 코드는 실제로 questionText 변수를보고 원래 문자열 인 출력을 생성하지만 숫자는 빈 문자열로 바뀝니다.

그러나 원래 변수에 자동으로 다시 할당되지는 않습니다. 할당 할 대상을 지정해야합니다.

questionText = questionText.replace(/[0-9]/g, '');

1

누군가에게 관심이있을 수 있으므로 문제에 대해 다른 방식으로 생각할 수 있도록 추가하고 싶습니다. 여기서 관심이 있는지 확실하지 않지만 관련성이 있다고 생각합니다.

다른 방법으로 제가 의미하는 것은 "내가 찾고있는 것이 아닌 것을 제거하는 것입니다. 즉, '딩'만 원한다면 다음과 같이 말할 수 있습니다.

var strippedText = ( "1 ding?"). replace (/ [^ a-zA-Z] / g, '');

기본적으로 "nog a, b, c, d .... Z (모든 문자)를 제거합니다.


1

두 번째 옵션은 다음과 유사한 식으로 숫자가 아닌 항목을 일치시키고 반환하는 것입니다.

/\D+/g

질문 ( 1 ding ?) 의 특정 문자열에 대해 작동 할 가능성이 높습니다 .

데모

테스트

function non_digit_string(str) {
	const regex = /\D+/g;
	let m;

	non_digit_arr = [];
	while ((m = regex.exec(str)) !== null) {
		// This is necessary to avoid infinite loops with zero-width matches
		if (m.index === regex.lastIndex) {
			regex.lastIndex++;
		}


		m.forEach((match, groupIndex) => {
			if (match.trim() != '') {
				non_digit_arr.push(match.trim());
			}
		});
	}
	return non_digit_arr;
}

const str = `1 ding ? 124
12 ding ?
123 ding ? 123`;
console.log(non_digit_string(str));


표현식을 단순화 / 수정 / 탐색하려는 경우 regex101.com의 오른쪽 상단 패널에 설명되어 있습니다. 원하는 경우이 링크 에서 일부 샘플 입력과 어떻게 일치하는지 볼 수도 있습니다.


RegEx 회로

jex.im은 정규 표현식을 시각화합니다.

여기에 이미지 설명 입력


0

이것은 regex더 효율적 으로 수행 할 수 있습니다 .

var questionText = "1 ding ?"
var index = 0;
var num = "";
do
{
    num += questionText[index];
} while (questionText[++index] >= "0" && questionText[index] <= "9");
questionText = questionText.substring(num.length);

또한 보너스로 번호를 저장하므로 일부 사람들에게 유용 할 수 있습니다.


0

.match && join () 메서드를 사용할 수 있습니다. .match ()는 배열을 반환하고 .join ()은 문자열을 만듭니다.

function digitsBeGone(str){
  return str.match(/\D/g).join('')
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.