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

285
Vistas
¿Cómo obtener el número después de una cadena particular de una matriz de cadenas usando javascript?

a continuación hay una matriz de cadenas.

 const arr = [ "list/1/item/1/", "item/2/", "item/3/subitem/2/", "item/4/subitem/3/someother/5", ]

ahora tengo que filtrar las cadenas que tienen una cadena que comienza con el elemento/1/ y no es seguida por ninguna otra cadena o termina con la cadena elemento/1/

entonces la matriz filtrada esperada es como la siguiente,

 const filtered_array = [ "list/1/item/1/", "item/2/", ]

de esta matriz filtrada quiero obtener solo el número después del elemento/ por lo que el resultado esperado es

 const ids = ["1","2"]

he intentado a continuación

 var output = arr.filter(x => x.match(/^item\/\d+|\bitem\/\d+\/$/)) .map(x => x.match(/(?<=^item\/)\d+|(?<=\bitem\/)\d+(?=\/$)/)[0]); //error //here

esto da salida como a continuación

 const output = ["1", "2", "3", "4"]

porque esto también coincide con las cadenas "elemento/3/elemento secundario/2/", "elemento/4/elemento secundario/3/algún otro/5",

¿Cómo puedo arreglar esta expresión regular para que coincida solo con las cadenas que comienzan con el elemento/3/ y no siguen ninguna otra cadena o terminan con el elemento/3/?

también obtengo que el objeto es posiblemente nulo en la línea de coincidencia del mapa. alguien podría ayudarme a arreglar esto. Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Parece que desea item/<any_number> , pero solo si es lo último en la cadena. Para hacerlo, usaría /\bitem\/\d+\/$/ :

  • \b significa "salto de palabra", por lo que no coincidimos con el subitem
  • item coincide con la palabra elemento literalmente
  • \/ es cómo escribes un / dentro de una expresión regular para que coincida con un / literalmente
  • \d significa "cualquier dígito"
  • + significa "uno o más (de esos dígitos)"
  • \/ es otro literal /
  • $ significa "fin de entrada

Como desea obtener el número de eso, envolveríamos \d+ en () para convertirlo en un grupo de captura. Luego use map para crear un mapa de la cadena coincidente o undefined y luego filtre undefined con filter :

 const rex = /\bitem\/(\d+)\/$/; const output = arr.map(str => (str.match(rex) ?? [])[1]) .filter(result => result !== undefined);

Ejemplo en vivo:

 const arr = [ "list/1/item/1/", "item/2/", "item/3/subitem/2/", "item/4/subitem/3/someother/5", ]; const rex = /\bitem\/(\d+)\/$/; const output = arr.map(str => (str.match(rex) ?? [])[1]) .filter(result => result !== undefined); console.log(output);

O haga solo una pasada a través de los datos usando un ciclo simple:

 const rex = /\bitem\/(\d+)\/$/; const output = []; for (const str of arr) { const match = str.match(rex); if (match) { output.push(match[1]); } }

Ejemplo en vivo:

 const arr = [ "list/1/item/1/", "item/2/", "item/3/subitem/2/", "item/4/subitem/3/someother/5", ]; const rex = /\bitem\/(\d+)\/$/; const output = []; for (const str of arr) { const match = str.match(rex); if (match) { output.push(match[1]); } } console.log(output);


Sin embargo, tenga en cuenta que eso coincidiría con "sub-item/1/" . Si desea que el item esté al principio de la cadena o justo después de / , cambiamos \b a (?:^|\/) para decir "comienzo de cadena o / " (el (?:___) es solo para agrupar la alternancia [ | ]): /(?:^|\/)item\/(\d+)\/$/

about 4 years ago · Juan Pablo Isaza 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