tengo una serie de cadenas como a continuación,
const arr = [ "list-domain/1/", "list-domain/1/list/1", "some-group/2/", "some-group/2/list/2", "list/3/", "list/3/item/1" ];como se ve desde la matriz anterior, quiero verificar si la matriz contiene cadenas de este tipo
"list-domain/1/" or "some-group/2/" or "list/3/"aquí los números después de / pueden ser cualquier cosa. lo que significa en "dominio de lista/1" aquí 1 puede ser 2 o 3 cualquier número. Tengo que verificar si la cadena contiene dominio de lista o algún grupo o lista seguida de / y cualquier número seguido de /
entonces, para la matriz anterior, el resultado esperado es verdadero.
ahora considere la matriz a continuación,
const arr1 = [ "list-domain/1/list/1", "some-group/2/list/2", "list/3/item/1" ];para arr1, la salida esperada es falsa aunque hay cadenas list-domain/1, some-group/2 y list/3 pero también están seguidas por otras cadenas como list-domain/1/list/1, some-group/2 /lista/2, lista/3/elemento/1
así que quiero encontrar los números de cadenas exactos que pueden ser cualquier cosa después de /. alguien me podria ayudar como hacer esto. Gracias.
EDITAR:
quiero que sea verdadero si la cadena tiene "lista/1/" o
cualquier cadena seguida de "lista/1" pero devuelve falso si "lista/1" es seguida por otra cadena como la siguiente
"list-domain/1/list/1/item/1"cierto en los casos a continuación
"list-domain/1/list/1" "list/2" "some-group/3/list/3"Usa una expresión regular. Aquí hay un ejemplo.
const rx = /^(([^\/]+)\/(\d+)\/)+$/ // or without the groups const rxNoGroups = /^([^\/]+\/\d+\/)+$/ const found = items.filter(it => rx.test(it))Esta expresión regular prueba
Adáptalo a tus necesidades. Lo codifiqué para que tus palabras que no son números aún puedan contener números, así que foo/2/bar3/4/ . También puede limitar el número de repeticiones.
También puede probar que la cadena termina con / .
Esto le da la salida requerida usando la expresión regular (RegExp):
arr.some(a=> new RegExp(/^(list-domain|some-group|list)\/[0-9]+\/$/g).test(a))Si puede contar con que la forma del patrón sea siempre un identificador de cadena seguido de una identificación numérica, un analizador podría tener el siguiente aspecto:
const arr = [ "list-domain/1/", "list-domain/1/list/1", "some-group/2/", "some-group/2/list/2", "list/3/", "list/3/item/1" ]; const parse = (str) => { const parts = str.split('/'); return parts.reduce((parsed, part, i, parts) => { if (part === '') return parsed; if (i % 2 === 0) { parsed[part] = null; } else { parsed[parts[i-1]] = part; } return parsed; }, {}); } arr.forEach(s => { console.log(parse(s)); }) // returns: // {list-domain: "1"} // {list-domain: "1", list: "1"} // {some-group: "2"} // {some-group: "2", list: "2"} // {list: "3"} // {list: "3", item: "1"}Devuelve un objeto donde las claves son los identificadores de cadena y los valores identificadores numéricos. Sin embargo, como dije, se basa en la forma exacta de la cadena y la alteración regular de un identificador y un valor.