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, '');
javascript
regex
Kiran
fuente
fuente
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, '');
fuente
\?,\*
, 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,'');
fuente
/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, '');
fuente
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).
fuente
Una opción secundaria sería hacer coincidir y devolver no dígitos con alguna expresión similar a,
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:
fuente
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.
fuente
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('') }
fuente