Quiero eliminar números de una cadena:
questionText = "1 ding ?"
Quiero reemplazar el 1
nú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, '');
Quiero eliminar números de una cadena:
questionText = "1 ding ?"
Quiero reemplazar el 1
nú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, '');
Respuestas:
Muy cerca, prueba:
questionText = questionText.replace(/[0-9]/g, '');
replace
no 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, '');
\?,\*
, pero probablemente quieras /[?*]/g
. ¡No dude en hacer una nueva pregunta cuando tenga una!
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,'');
/g
de todas las expresiones regulares - JavaScript es molesto de esa manera:)
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, '');
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).
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 ?
).
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.
jex.im visualiza expresiones regulares:
Esto se puede hacer sin regex
cuá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.
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('')
}