Регулярное выражение с двумя уникальными требованиями - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно регулярное выражение, которое соответствует следующей строке:

"( one , two,three ,four, '')"

и извлекает следующее:

"one"
"two"
"three"
""

Может быть любое количество элементов.Регулярное выражение:

"\[a-zA-Z\]+|(?<=')\\s*(?=')"

работает, но библиотека, которую я использую, не совместима с проверочными утверждениями.

Есть ли у меня какие-либо опции?

1 Ответ

1 голос
/ 06 июня 2019

Это выражение, скорее всего, захватит то, что мы могли бы извлечь здесь:

(\s+)?([A-Za-z]+)(\s+)?|'(.+)?'

, для которого нам не нужны другие дополнительные границы, и наши желаемые результаты находятся в этих двух группах:

([A-Za-z]+)
(.+)

Демо

Схема регулярного обмена

jex.im визуализирует регулярные выражения:

enter image description here

Тест

const regex = /(\s+)?([A-Za-z]+)(\s+)?|'(.+)?'/gm;
const str = `"( one , two,three ,four, '')"`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...