Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

95
Vistas
Consejos sobre cómo resolver un problema al extraer solo números de una cadena usando JavaScript

Soy nuevo en stackoverflow y agradecería algún consejo que me ayude a resolver este problema. Tengo dos cadenas de las que quiero extraer números.

String 1 = "12.3,Name1,3,4,Name2,35,Name3" devuelve [12.3,3,4,35]

Cuál es el resultado requerido.

String 2 = "12.3,22,Q" devuelve [12.322] ¿Cuál es el resultado incorrecto? Debería ser [12.3,22]

He comentado mi código con los pasos que he tomado para completar la tarea. De nuevo muchas gracias por vuestros consejos y ayuda de antemano.

Aquí hay una copia de mi código:

 function extractNumbers(str) { //Use replace() to replace all instances of letters/alpha* let onlyNumbersString = str.replace(/[az]/ig, ''); //remove "," using replace()* onlyNumbersString = onlyNumbersString.replace(",", ""); //Create an array of numbers* let arrayOfNumbers = onlyNumbersString.split(','); let result = arrayOfNumbers.map((x) => parseFloat(x)) console.log(arrayOfNumbers) console.log(result); const filtered = result.filter(function(e) { return e }) console.log(filtered) } let numbers = "12.3,Name1,3,4,Name2,35,Name3" //returns [12.3,3,4,35] //"12.3,22,Q" returns [12.322]* extractNumbers(numbers)

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Simplemente puede dividir en , verificar si es un número válido de no

 function extractNumbers(str) { let onlyNumbersString = str.split(',').filter(v => /^\d+(\.\d+)?$/.test(v)) console.log(onlyNumbersString) } let numbers = "12.3,Name1,3,4,Name2,35,Name3" //returns [12.3,3,4,35] //"12.3,22,Q" returns [12.322]* extractNumbers(numbers) extractNumbers('12.3,22,Q')

Si no quiere usar expresiones regulares, puede usar isNaN

 let onlyNumbersString = str.split(',').filter(v => v.trim() && !isNaN(v))
about 4 years ago · Santiago Trujillo Denunciar

0

Creo que puede generar la salida deseada utilizando la siguiente expresión regular

/\b\d+\.?\d*\b/g

Esto supone que no hay cadenas como Name2 45

 const str = "12.3,Name1,3,4,Name2,35,Name3"; console.log(str.match(/\b\d+\.?\d*\b/g))

about 4 years ago · Santiago Trujillo Denunciar

0

El resultado incorrecto se debe a esta línea:

 onlyNumbersString = onlyNumbersString.replace(",", "");

Una vez que haces eso, "12.3,22," (que era "12.3,22,Q" pero se le quitó la Q antes) se convierte en "12.322" , por lo que parece un solo número.

Primero dividiría, luego eliminaría los segmentos que no tienen texto numérico y luego los convertiría en números:

 function extractNumbers(str) { // Split on commas, since that seems to be the delimiter you want const parts = str.split(","); // Remove any strings that aren't all number chars (including `.`) const filtered = parts.filter((s) => !/[^.\d]/.test(s)); // Convert to number const numbers = filtered.map((s) => parseFloat(s)); return numbers; } console.log(extractNumbers("12.3,Name1,3,4,Name2,35,Name3"));

O sin comentarios:

 function extractNumbers(str) { const parts = str.split(","); const filtered = parts.filter((s) => !/[^.\d]/.test(s)); const numbers = filtered.map((s) => parseFloat(s)); return numbers; }

Podría convertirlo en una sola declaración, pero se vuelve más difícil de depurar:

 function extractNumbers(str) { return str .split(",") .filter((s) => !/[^.\d]/.test(s)) .map((s) => parseFloat(s)); }

Debo señalar que la única razón para verificar que un segmento es válido es que parseFloat aceptará felizmente "123abc" , devolviendo 123 e ignorando el resto. Podría usar el operador unario + o la función Number en su lugar, verificando el caso "" (que le daría 0 si no lo eliminara):

 function extractNumbers(str) { const parts = str.split(","); const numbers = parts.map((s) => s.trim() ? +s : NaN); const validNumbers = numbers.filter((num) => !isNaN(num)); return validNumbers; } console.log(extractNumbers("12.3,Name1,3,4,Name2,35,Name3"));

Mi respuesta aquí pasa por las diversas opciones para convertir cadenas en números y las trampas de cada una de ellas.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda