Отделить слова регулярным выражением
Я пытаюсь получить регулярным выражением второе слово.
Вот такой текст я имею:
@import "vars";
@import "fonts";
@import "global";
@import "dddd";
// ============================
:root {
--fs: 2vw;
}
$red: red;
body {
// @include f500;
font-family: 'Museo Cyrl 500';
font-size: var(--fs);
// font-size: 20px;
line-height: 27px;
font-weight: 300;
color: #838383;
background-color: #ffffff;
}
Я хочу получить следующее в массив:
[vars],[fonts],[global],[dddd]
Вот что я написал:
В переменную str я написал похожий текст для тестирования.
Тот текст "выше" я считываю через nodejs из файла.
const regexp = /@import\s([^\w])/g;
let str = '@import "vars"; @import "dwada"; dwdw wddwa fgfff aaaaa'
let result = str.matchAll(regexp);
let exit = Array.from(result);
let firstMatch = exit[0];
console.log(firstMatch[0])
Но мне возвращается совсем другое: @import "
Как составить данное регулярное выражение правильно? Подскажите пожалусто.
Ответы (1 шт):
const regexp = /@import\s+["']([^"']+)["'];/gi;
const str = `
@import "vars";
@import "fonts";
@import "global";
@import "dddd";
dwdw wddwa fgfff aaaaa
`;
const result = str.matchAll(regexp);
// получение массива строк со значениями из первой группы рег.выражения:
const matchGroupValues = [...result].map(([, group1]) => group1);
console.log(matchGroupValues); // ['vars', 'fonts', 'global', 'dddd']
// оборачивание полученных значений в массивы, как написано в вопросе:
const valuesInArrays = matchGroupValues.map(value => [value]);
console.log(valuesInArrays); // [['vars'], ['fonts'], ['global'], ['dddd']]
Составляющие рег. выражения:
@import- буквально эта последовательность символов\s+- как минимум один пробельный символ["']- ровно один символ кавычек (либо", либо')([^"']+)- захват (в первую группу) любых символов кроме"и', как минимум один такой "некавычковый" символ
Квантификатор + ("одно или больше") жадный по-умолчанию, поэтому в группу захвата результата попадает максимально возможное количество "некавычковых" символов входной строки. Аналогично и с пробелами: с данным квантификатором, токену \s будет соответствовать как можно большее количество пробельных символов.
Завершающая часть выражения ["']; необязательна, работать будет и без нее: в пример эта часть добавлена только для лучшего понимания рег.выражений (с этой частью, выражение целиком описывает statement с директивой @import).