Как я могу разбить строку и получить только ключевую часть с помощью регулярного выражения? - PullRequest
1 голос
/ 18 февраля 2020

У меня есть строка типа "A < -5.9 AND B >= 6 OR (C < 3)" Мне нужно получить ключи ключей. (A, B, C). Так что я подумал, что сначала я должен разделить AND и OR, а затем получить ключевую часть? Не могли бы вы помочь мне? Я написал только A, B, C, но в моем реальном примере A может быть любая строка. Важно то, что значение справа от <,>, <=,> =

Ответы [ 4 ]

0 голосов
/ 18 февраля 2020

Если это просто вопрос захвата имен переменных, которые появляются слева от оператора сравнения:

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

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

console.log(variables);
0 голосов
/ 18 февраля 2020

Мы можем попробовать выполнить поиск по регулярному выражению для всех совпадений по шаблону:

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

Пример сценария:

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);

Вот объяснение используемого шаблона регулярного выражения:

\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
0 голосов
/ 18 февраля 2020

Без регулярных выражений вы можете процитировать строку и соответствовать символу > или <. Если символ совпадает, создайте подстроку, а затем получите последний символ подстроки. Также обратите внимание, trim() удалит все пробелы из строки

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 голосов
/ 18 февраля 2020

Самый простой способ - разделить с помощью регулярного выражения:

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

// ["A < -5.9", "B >= 6", "(C < 3)"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...