2017-10-13 2 views
0

Je veux/j'ai besoin de diviser une chaîne par un caractère spécifique, par exemple un '/' que je peux attendre de manière fiable, mais j'ai besoin de savoir ce que les caractères directement dans Devant ce personnage sont à l'espace devant ces personnages.Chaîne fendue avec 1 caractères connus et quelques caractères inconnus dans Javascript

Par exemple:

nous myStr = "bob u/ used cars nr/ no resale value i/ information is attached to the vehicle tag bb/ Joe's wrecker service"

Donc, je peux diviser par le '/' utilisant déjà

mySplitStr = myStr.split('/');

Mais maintenant mySplitStr est un tableau comme

mySplitStr[1] = "bob u" mySplitStr[2] = " used cars nr" mySplitStr[3] = " no resale value i" etc

J'ai besoin, cependant, de savoir ce que les caractères sont juste avant le '/'.

u nr i etc

pour que je sache quoi faire avec les informations suivantes le '/'.

Toute aide est grandement appréciée.

+0

Hmm trouver peut-être l'indice à «/» puis utilisez charAt (index de "/" moins 1). Est-ce ce que vous cherchez? un moyen de trouver le caractère avant "/" droit? –

Répondre

4

Vous pouvez utiliser cet argument d'expression régulière pour la split:

let parts = myStr.split(/\s*(\S+)\/\s*/); 

Maintenant, vous aurez les caractères spéciaux à chaque position impaire dans le tableau résultant.

let myStr = "bob u/ used cars nr/ no resale value i/ information is attached to the vehicle tag bb/ Joe's wrecker service"; 
 
let parts = myStr.split(/\s*(\S+)\/\s*/); 
 

 
console.log(parts);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Pour un résultat plus structuré, vous pouvez utiliser ces combinaisons de caractères spéciaux comme des clés d'un objet:

let myStr = "bob u/ used cars nr/ no resale value i/ information is attached to the vehicle tag bb/ Joe's wrecker service"; 
 
let obj = myStr.split(/\s*(\S+)\/\s*/).reduceRight((acc, v) => { 
 
    if (acc.default === undefined) { 
 
     acc.default = v; 
 
    } else { 
 
     acc[v] = acc.default; 
 
     acc.default = undefined; 
 
    } 
 
    return acc; 
 
}, {}); 
 
console.log(obj);

+0

La question demande de produire la liste «u», «nr», «i» etc », pas« bob »,« u »,« voitures d'occasion »...». C'est exactement pourquoi je reste personnellement loin de regex - ils sont durs –

+0

@IgorSoloydenko, ...et OP continue de dire * "pour que je sache quoi faire avec les informations qui suivent le '/'." *. Donc le contexte est nécessaire. Cette différence d'interprétation de la question n'a rien à voir avec regex. – trincot

+0

Je vois cette ligne, mais l'exigence n'est alors pas claire au mieux. L'entrée est fournie, mais la sortie précise ne l'est pas. Au moins, vous et moi l'interprétons différemment. –

0

Je pense, c'est ce que vous cherchez:

"bob u/ used cars nr/ no resale value i/ information is attached to the vehicle tag bb/ Joe's wrecker service" 
    .split('/') 
    .map(splitPart => { 
    const wordsInPart = splitPart.split(' '); 
    return wordsInPart[wordsInPart.length - 1]; 
    }); 

// Produces: ["u", "nr", "i", "bb", "service"] 

Fractionnement par '/' ne suffit pas. Vous devez également visiter chaque partie de votre résultat scindé et en extraire le dernier "travail".

0

Une fois que vous divisez votre chaîne , vous avez en effet un tableau, où le dernier ensemble de caractères est le sur e Vous voulez savoir, et vous pouvez le saisir avec ceci:

let mySplitStr = myStr.split('/'); 
for(let i = 0; i < mySplitStr.length; i++) { 
    let mySplitStrEl = mySplitStr[i].split(" "); // Split current text element 
    let lastCharsSet = mySplitStrEl[mySplitStrEl.length -1]; // Grab its last set of characters 
    let myCurrentStr = mySplitStrEl.splice(mySplitStrEl.length -1, 1); // Remove last set of characters from text element 
     myCurrentStr = mySplitStrEl.join(" "); // Join text element back into a string 
    switch(lastCharsSet) { 
     case "u": 
      // Your code here 
     case "nr": 
      // Your code here 
     case "i": 
      // Your code here 
    } 
} 

intérieur de la boucle, pour la première itération:

// lastCharsSet is "u" 
// myCurrentStr is "bob"