文字列から数字を削除するにはどうすればよいですか?


84

文字列から数字を削除したい:

questionText = "1 ding ?"

1番号と疑問符を置き換えたいのですが?。任意の数にすることができます。次の機能しないコードを試しました。

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

3
正確に何が機能していないのですか?それは数を削除されているので...
フェリックスクリング

小数点も削除する必要がありますか?
ツチボタル2011

1
@Berbiこの質問は重複していません。引用された「Replaceメソッドが機能しません」には適切なタイトルがないため、ユーザーは「文字列から数字を削除する」と入力して検索できます。悪い節度。
Gilberto Albino 2014

回答:


165

非常に近い、試してみてください:

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

replace既存の文字列では機能せず、新しい文字列を返します。あなたがそれを使いたいならば、あなたはそれを保つ必要があります!
同様に、新しい変数を使用できます。

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

数字のブロック全体を一度に削除する最後のトリックですが、それは行き過ぎかもしれません:

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

交換できますか?&* str.replace( "?、*"、 "");のような1つの置換メソッドの文字列から
kiran 2011

それは機能していません、私は両方を交換したいですか?および*文字列にスペースがある
kiran 2011

@ kiran-たとえば\?,\*、それらをエスケープすることを忘れないでください、しかしあなたはおそらく欲しいでしょう/[?*]/g。して自由に感じる新しい質問をお持ちのとき!
コビ2011

11

文字列は不変であるためquestionText.replace(/[0-9]/g, '');、それ自体で機能しますが、questionText-stringは変更されません。置換の結果を別の文字列変数に割り当てるか、questionText自体に再度割り当てる必要があります。

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

または1回で(を使用して\d+、Kobiの回答を参照):

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

そして、あなたがそれにいる間に先頭(および末尾)のスペースをトリミングしたい場合:

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

忘れてはいけない/gすべての正規表現に- JavaScriptは迷惑なことな方法です:)
コビ

9

あなたは非常に近いです。

質問で書いたコードは次のとおりです。

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

あなたが書いたコードは確かにquestionText変数を見て、元の文字列であるが数字が空の文字列に置き換えられた出力を生成します。

ただし、元の変数に自動的に割り当てられるわけではありません。何に割り当てるかを指定する必要があります。

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

1

誰かが興味を持っているかもしれないので、追加したいだけです。逆に問題について考えるかもしれません。ここでそれが興味深いかどうかはわかりませんが、関連性があると思います。

別の言い方をすれば、「私が探しているものではないものはすべて削除します。つまり、「ding」だけが必要な場合は、次のように言うことができます。

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

これは基本的に「noga、b、c、d .... Z(任意の文字)であるものをすべて削除する」という意味です。


1

2番目のオプションは、次のような式で数字以外を照合して返すことです。

/\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の右上のパネルで説明されています。必要に応じて、このリンクで、いくつかのサンプル入力とどのように一致するかを確認することもできます。


正規表現回路

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.