Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

283
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda