¿Cómo eliminar números de una cadena?

81

Quiero eliminar números de una cadena:

questionText = "1 ding ?"

Quiero reemplazar el 1número y el signo de interrogación ?. Puede ser cualquier número. Probé el siguiente código que no funciona.

questionText.replace(/[0-9]/g, '');
Kiran
fuente
3
Qué exactamente no funciona? Porque está quitando el número ...
Felix Kling
¿También necesitará eliminar los puntos decimales?
luciérnagas
1
@Berbi Esta pregunta no está duplicada. El citado "El método Reemplazar no funciona" no tiene un título adecuado para que un usuario pueda escribir y buscar "Eliminar números de la cadena". Mala moderación.
Gilberto Albino

Respuestas:

160

Muy cerca, prueba:

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

replaceno funciona en la cadena existente, devuelve una nueva. Si quieres usarlo, ¡debes conservarlo!
Del mismo modo, puede utilizar una nueva variable:

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

Un último truco para eliminar bloques enteros de dígitos a la vez, pero ese puede ir demasiado lejos:

questionText = questionText.replace(/\d+/g, '');
Kobi
fuente
¿Puedo reemplazar? & * de una cadena en un método de reemplazo como str.replace ("?, *", "");
kiran
que no funciona, quiero reemplazar ambos? y * con espacio en mi cadena
kiran
@kiran: recuerda escapar de ellos, por ejemplo \?,\*, pero probablemente quieras /[?*]/g. ¡No dude en hacer una nueva pregunta cuando tenga una!
Kobi
11

Las cuerdas son inmutables , por eso questionText.replace(/[0-9]/g, '');por sí solas hace el trabajo, pero no cambia el questionText cuerdas. Tendrá que asignar el resultado del reemplazo a otra variable de cadena o cuestionar el texto de nuevo.

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

o en 1 vez (usando \d+ , vea la respuesta de Kobi):

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

y si desea recortar los espacios iniciales (y finales) mientras lo hace:

 questionText = ("1 ding ?").replace(/\d+|^\s+|\s+$/g,'');
KooiInc
fuente
No se olvide /gde todas las expresiones regulares - JavaScript es molesto de esa manera:)
Kobi
9

Estás muy cerca.

Aquí está el código que escribió en la pregunta:

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

El código que ha escrito efectivamente mira la variable questionText y produce un resultado que es la cadena original, pero con los dígitos reemplazados por una cadena vacía.

Sin embargo, no lo asigna automáticamente a la variable original. Debe especificar a qué asignarlo:

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

Solo quiero agregar, ya que podría ser de interés para alguien, que también puede pensar en el problema de otra manera. No estoy seguro de si eso es de interés aquí, pero lo encuentro relevante.

Lo que quiero decir de otra manera es decir "quita todo lo que no sea lo que estoy buscando, es decir, si solo quieres el 'ding', podrías decir:

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

Lo que básicamente significa "eliminar todo lo que sea nog a, b, c, d .... Z (cualquier letra).

qrikko
fuente
1

Una opción secundaria sería hacer coincidir y devolver no dígitos con alguna expresión similar a,

/\D+/g

que probablemente funcionaría para esa cadena específica en la pregunta ( 1 ding ?).

Manifestación

Prueba

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));


Si desea simplificar / modificar / explorar la expresión, se explica en el panel superior derecho de regex101.com . Si lo desea, también puede ver en este enlace cómo coincidiría con algunas entradas de muestra.


Circuito RegEx

jex.im visualiza expresiones regulares:

ingrese la descripción de la imagen aquí

Emma
fuente
0

Esto se puede hacer sin regexcuál es más eficiente:

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);

Y como beneficio adicional, también almacena el número, lo que puede ser útil para algunas personas.

Dan Bray
fuente
0

Puede utilizar los métodos .match && join (). .match () devuelve una matriz y .join () hace una cadena

function digitsBeGone(str){
  return str.match(/\D/g).join('')
}
captainozlem
fuente