RegEx для соответствия файлам yaml - PullRequest
1 голос
/ 31 мая 2019

У меня есть следующий путь к каталогу, который содержит файлы yaml:

test/1.yaml
test/dev.yaml
test/dev0_r.yaml 

и т. Д.

Как мне сопоставить все файлы yaml, которые находятся точно в каталоге test /, но не в подкаталогах, таких как test / test1 / dev.yaml

Я пытался использовать globing:

test/*.yaml 

но это не сработало на https://regex101.com/

Как мне этого добиться?

1 Ответ

5 голосов
/ 31 мая 2019

Здесь мы добавляем условие класса без слеша после test dir, чтобы пропустить только первый каталог, с выражением, похожим на:

^test\/[^\/]+\.yaml$

Мы можем добавить / уменьшить нашграницы, если мы этого хотим.Мы могли бы, например, отбросить начальный и конечный якоря, и он все еще может работать:

test\/[^\/]+\.yaml

Демо

const regex = /^test\/[^\/]+\.yaml$/gm;
const str = `test/1.yaml
test/dev.yaml
test/dev0_r.yaml
test/test1/dev.yaml`;
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}`);
    });
}

Схема RegEx

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

enter image description here

...