2017-03-02 1 views
0

Compte tenu des chaînes telles que:Isoler une sous-chaîne non gourmande?

foo/**hello**/baré 
foo/crazy/**hello**/baré 
**hello**/crazy/baré 

Pour chaque ligne, comment isoler hello (le texte entre le **) via un JS? (? Regex recherche)

(la sortie voulu pour chaque ligne est hello)


Jusqu'à présent, j'échoue là: .*?\*\*(.*?)\*\*.*? =>$1 me donne:

hello/baré 
hello/baré 
hello/crazy/baré 
+0

Utilisez-vous remplacer pour obtenir votre sortie? Alors le dernier '. *?' Doit être gourmand pour correspondre à la fin de la chaîne. Si vous utilisez match avec votre regex, cela devrait fonctionner correctement. –

Répondre

3

Vous pourriez utiliser une expression qui correspond à n'importe quel caractère sauf *:

const inputs = [ 
 
    'foo/**hello**/baré', 
 
    'foo/crazy/**hello**/baré', 
 
    '**hello**/crazy/baré' 
 
]; 
 

 
inputs.forEach(input => { 
 
    const matches = input.match(/.*\*\*([^*]+)\*\*.*/); 
 
    console.log(matches[1]); 
 
});

+0

La sortie voulue pour chaque ligne est 'hello'. Selon mon test, votre réponse ne le fait pas. – Hugolpz

+0

J'ai ajouté un extrait de code exécutable qui affiche "bonjour" à la console 3 fois :-) –

+0

Oh. vous utilisez '.match()'. – Hugolpz

2

Avec un mot, il suffit d'utiliser \w:

\*+(\w+)\*+ 

Demo

Si vous voulez spécifiquement 2 * faire juste

\*{2}(\w+)\*{2} 

Si vous avez une phrase ou un caractères de paragraphe ou mixte, recherche de caractères autre que les délimiteurs de début et de fin:

\*{2}([^*]+)\*{2} 
+0

Merci pour la réponse! J'ai pris ton idée de '{2}': D – Hugolpz