извлечь метатег с помощью регулярных выражений - PullRequest
3 голосов
/ 17 марта 2020

Мне нужно извлечь метатег из строки, для которой я использую \<meta[\s\S]*?\>, но наряду с этим я хочу игнорировать, если в мете есть какой-то атрибут ignore (или someIgnore).

<meta property="position" content="1" someIgnore ignore="metaextract"/>.
Это моя функция выборки.


function parseMetas(locals) {
    var str = locals.body, regex = /\<meta[\s\S]*?\>/g;
    if (regex.test(str)) {
        locals.body = str.replace(regex, '');
        locals.meta = str.match(regex).join('\n');
    }
}

1 Ответ

1 голос
/ 17 марта 2020

Вы можете использовать negative lookahead в регулярных выражениях.

function parseMetas(locals) {
    var str = locals.body, 
    let regex = /<meta(?!.*?(ignore|someIgnore))[\s\S]*?\/?>/g;
    if (regex.test(str)) {
        locals.body = str.replace(regex, '');
        locals.meta = str.match(regex).join('\n');
    }
}

Демо:

let regex = /<meta(?!.*(ignore|someIgnore))[\s\S]*?\/>/g;
let input = `
    <meta property="position" content="1" someIgnore ignore="metaextract"/>,
    <meta property="position" content="1" ignore="metaextract"/>,
    <meta property="position" content="1"/>,
    <meta property="position" content="1" someIgnore />,
    <meta name="description" content="type_your_description_here"/>,
    <meta charset="utf-8"/>'
`;


console.log(input.match(regex));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...