2 votes

Je cherche le moyen le plus simple d'extraire une sous-chaîne inconnue d'une chaîne de caractères. (termes séparés par des barres obliques)

La chaîne initiale :
initString = '/digital/collection/music/bunch/of/other/stuff'

Ce que je veux :
music

  • Plus précisément, je veux tout terme (qui n'inclura jamais de barre oblique) qui viendrait entre collection/ y /bunch

Comment je procède :

if(initString.includes('/digital/collection/')){
    let slicedString = initString.slice(19); //results in 'music/bunch/of/other/stuff'
    let indexOfSlash = slicedString.indexOf('/'); //results, in this case, to 5
    let desiredString = slicedString.slice(0, indexOfSlash); //results in 'music'
}

Question :
Comment diable puis-je accomplir cela en javascript d'une manière plus élégante ?

  • J'ai cherché quelque chose comme un endIndexOf() qui remplacerait mon code dur .slice(19)
    • lastIndexOf() n'est pas ce que je recherche, car je veux l'index à la fin de la première instance de ma sous-chaîne /digital/collection/
  • Je cherche à réduire le nombre de lignes, et je n'ai rien trouvé qui ressemble à un .getStringBetween('beginCutoff, endCutoff')

Merci d'avance !

5voto

Rick Points 1142

Votre titre dit "index" mais votre exemple montre que vous voulez retourner une chaîne de caractères. Si, en fait, vous voulez retourner la chaîne, essayez ceci :

if(initString.includes('/digital/collection/')) {
    var components = initString.split('/');
    return components[3]; 
}

3voto

Ibu Points 17457

Si le chemin est toujours le même, et que le champ que vous voulez est celui qui se trouve après le troisième / vous pouvez alors utiliser le fractionnement.

var initString = '/digital/collection/music/bunch/of/other/stuff';
var collection = initString.split("/")[2]; // third index

Dans le monde réel, vous voudrez d'abord vérifier si l'index existe avant de l'utiliser.

var collections = initString.split("/");
var collection = "";
if (collections.length > 2) {
    collection = collections[2];
}

2voto

j8user28 Points 46

Vous pouvez utiliser const desiredString = initString.slice(19, 24); si c'est toujours de la musique que vous recherchez.

2voto

Willman.Codes Points 1174

Si vous devez trouver le paramètre de chemin suivant '/digital/collection/', quel que soit l'endroit où '/digital/collection/' se trouve dans le chemin, cliquez sur le lien suivant

  1. utiliser d'abord la division pour obtenir un tableau de chemins
  2. puis utiliser find pour retourner l'élément dont les 2 éléments précédents sont respectivement digital et collection

    const initString = '/digital/collection/music/bunch/of/other/stuff'

    const pathArray = initString.split('/')

    const path = pathArray.length >= 3
    ? pathArray.find((elm, index)=> pathArray[index-2] === 'digital' && pathArray[index-1] === 'collection')
    'path is too short'

    console.log(path)

1voto

IceMetalPunk Points 13

Pensez-y logiquement : l'"indice de fin" est juste l'"indice de début" plus la longueur de la sous-chaîne, n'est-ce pas ? Alors... faites-le :)

const sub = '/digital/collection/';
const startIndex = initString.indexOf(sub);
if (startIndex >= 0) {
    let desiredString = initString.substring(startIndex + sub.length);
}

Cela vous donnera de la fin de la sous-chaîne à la fin de la chaîne complète ; vous pouvez toujours diviser à / et prendre l'index 0 pour n'obtenir que le premier nom de répertoire de ce qui reste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X