Як видалити числа з рядка?


84

Я хочу видалити числа з рядка:

questionText = "1 ding ?"

Я хочу замінити 1номер і знак запитання ?. Це може бути будь-яке число. Я спробував наступний неробочий код.

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

3
Що саме не працює? Тому що це прибирає номер ...
Фелікс Клінг

Вам також потрібно буде видалити десяткові крапки?
glowworms

1
@Berbi Це питання не повторюється. Цитований "Метод заміни не працює" не має належного заголовка, щоб користувач міг ввести текст і здійснити пошук "Видалення чисел із рядка". Погана модерація.
Gilberto Albino

Відповіді:


164

Дуже близько, спробуйте:

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

replaceне працює на існуючому рядку, він повертає новий. Якщо ви хочете ним скористатися, вам потрібно його зберегти!
Аналогічним чином ви можете використовувати нову змінну:

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

Останній фокус, щоб видалити цілі блоки цифр одночасно, але цей може зайти занадто далеко:

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

чи можу я замінити? & * із рядка в одному замініть метод як str.replace ("?, *", "");
kiran

це не працює, я хочу замінити обидва? та * з космосом у моїй струні
Кіран,

@kiran - пам'ятай, наприклад \?,\*, уникнути їх , але ти, мабуть, хочеш /[?*]/g. Не соромтеся задавати нове питання, коли воно у вас є!
Кобі

11

Рядок є незмінною , тому questionText.replace(/[0-9]/g, '');на його власний робить роботу, але це не змінює questionText-рядки. Вам доведеться призначити результат заміни іншій змінній String або знову задати сам TextText.

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

або за 1 прийом (використовуючи \d+, див. відповідь Кобі):

 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

Просто хочу додати, оскільки це може когось зацікавити, що ви можете подумати про проблему і по-іншому. Я не впевнений, чи це тут цікавить, але я вважаю це доречним.

Що я маю на увазі під іншим способом, це сказати "позбавити все, що не є тим, що я шукаю, тобто якщо ви хочете лише" дзвін ", ви можете сказати:

var strippedText = ("1 дзвін?"). замінити (/ [^ a-zA-Z] / g, '');

Що в основному означає "видалити все, що є a 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('')
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.