Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

99
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!