1
votes

Comment puis-je diviser une chaîne et obtenir juste une partie clé avec regex?

J'ai une chaîne comme "A <-5.9 AND B> = 6 OR (C <3)" Je dois obtenir une partie des clés (A, B, C). Alors j'ai pensé que je devrais d'abord séparer ET et OU ensuite je devrais obtenir la partie clé? Pourriez-vous m'aider? J'ai écrit juste A, B, C mais dans mon exemple réel, A peut être n'importe quelle chaîne. L'important est que la valeur soit du côté droit de <,>, <=,> =


1 commentaires

Un exemple ne suffira pas pour trouver la bonne logique. Soit vous fournissez plus d'exemples, soit les règles auxquelles vos expressions adhèrent. Avec le seul exemple que vous avez maintenant, il suffit d'extraire tous les jetons d'une lettre.


4 Réponses :


0
votes

Le moyen le plus simple serait de diviser en utilisant une expression régulière:

"A < -5.9 AND B >= 6 OR (C < 3)".split(/ AND | OR /);

// ["A < -5.9", "B >= 6", "(C < 3)"]


0 commentaires

0
votes

Nous pouvons essayer de faire une recherche regex pour toutes les correspondances sur le modèle:

\b([A-Z]+)    match and capture a key as one or more capital letters
 \S+          match space followed by a symbol and another space
-?\d+         match a number with optional negative sign
(?:\.\d+)?\b  match an optional decimal component

Exemple de script:

var regex = /\b([A-Z]+) \S+ -?\d+(?:\.\d+)?\b/g;
var input = "A < -5.9 AND B >= 6 OR (C < 3)";
var m;

do {
    m = regex.exec(input);
    if (m) {
        console.log(m[1]);
    }
} while (m);

Voici une explication du modèle d'expression régulière utilisé:

\b([A-Z]+) \S+ -?\d+(?:\.\d+)?\b


0 commentaires

0
votes

Sans expression régulière, vous pouvez écrire la chaîne et faire correspondre le caractère > ou . Si le caractère correspond, créez une sous-chaîne, puis récupérez le dernier caractère de la sous-chaîne. Notez également que trim () supprimera tout espace blanc de la chaîne

let str = 'A < -5.9 AND B >= 6 OR (C < 3)';
let arr = [];
for (let i = 0; i < str.length; i++) {
  if (str[i] === '<' || str[i] === '>') {
    let subStr = str.substring(0, i).trim();
    arr.push(subStr.charAt(subStr.length - 1))
  }
};
console.log(arr);


0 commentaires

0
votes

S'il s'agit simplement de capturer les noms de variables qui apparaissent à gauche d'un opérateur de comparaison:

const s = "A < -5.9 AND B >= 6 OR (C < 3)";

const variables = s.match(/\w+(?=\s*[<>])/g);

console.log(variables);


0 commentaires