244 votes

Expression régulière pour obtenir une chaîne de caractères entre deux chaînes de caractères en Javascript

J'ai trouvé des messages très similaires, mais je n'arrive pas à trouver mon expression régulière.

J'essaie d'écrire une expression régulière qui renvoie une chaîne qui se trouve entre deux autres chaînes. Par exemple : Je veux obtenir la chaîne qui se trouve entre les chaînes "vache" et "lait".

Ma vache donne toujours du lait

renverrait

"donne toujours"

Voici l'expression que j'ai reconstituée jusqu'à présent :

(?=cow).*(?=milk)

Cependant, cette méthode renvoie la chaîne "la vache donne toujours".

1voto

trincot Points 10112

Vous pouvez utiliser la déstructuration pour vous concentrer uniquement sur la partie qui vous intéresse.

Vous pouvez donc le faire :

let str = "My cow always gives milk";

let [, result] = str.match(/\bcow\s+(.*?)\s+milk\b/) || [];

console.log(result);

De cette façon, vous ignorez la première partie (la correspondance complète) et n'obtenez que la correspondance du groupe de capture. L'ajout de || [] peut être intéressant si vous n'êtes pas du tout sûr qu'il y aura une correspondance. Dans ce cas match renverrait null qui ne peut pas être déstructuré, et nous retournons donc [] dans ce cas, et ensuite result sera null .

Le supplément \b veille à ce que les mots environnants "vache" et "lait" soient réellement des mots distincts (et non pas "laiteux"). En outre, les mots "vache" et "lait" doivent être séparés. \s+ est nécessaire pour éviter que la correspondance ne comprenne un espacement extérieur.

0voto

Marc Antoni Points 11

La méthode match() recherche une correspondance dans une chaîne de caractères et renvoie un objet de type tableau.

// Original string
var str = "My cow always gives milk";

// Using index [0] would return<br/>
// "**cow always gives milk**"
str.match(/cow(.*)milk/)**[0]**

// Using index **[1]** would return
// "**always gives**"
str.match(/cow(.*)milk/)[1]

0voto

Vasily Bodnarchuk Points 8047

Tâche

Extraire la sous-chaîne entre deux chaînes de caractères (en excluant ces deux chaînes)

Solution

let allText = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum";
let textBefore = "five centuries,";
let textAfter = "electronic typesetting";
var regExp = new RegExp(`(?<=${textBefore}\\s)(.+?)(?=\\s+${textAfter})`, "g");
var results = regExp.exec(allText);
if (results && results.length > 1) {
    console.log(results[0]);
}

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