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
<,>, <=,> =
4 Réponses :
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)"]
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
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);
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);
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.