Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting

Как оптимизировать такое регулярное выражение?

Приветствую!

Пытаюсь разобрать html тег (строку текста, похожую на html тег) на составные части.
Пример тега: <div class="test" data-status="false">
Мое регулярное выражение:
<([a-z]+)(?:\s*)(?:(class)="(.*?)")(?:\s*)(?:(data-.*)="(.*?)").*>

Вопросы:
1. Учитывая, что все идет по шаблону (например атрибуты id|class|data-), то как лучше оптимизировать|улучшить регулярное выражение? Возможно 2 раза "искать, но не запоминать пробел" не нужно...
2. Имеется ли возможность помещать содержимое атрибутов сразу в дополнительный массив, который следует сразу за родительским атрибутом? Например было: {'class', 'vasya petya'}, стало: {'class': {vasya petya}}. На настоящий момент, произвожу данную операцию в дополнительном цикле.

Спасибо!

UPD: это не html тег, а строка текста похожая на него. Изучаю регулярные выражения и для примера взял подобного рода задачу. То, что для парсинга html лучше использовать другие инструменты - вкурсе.
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack
Thinking about a11y
Так а зачем вам регулярки?

function getAttrs(element) {
    var attrs =  {};

    [...element.attributes].forEach(attr => attrs[attr.name] = attr.value.split(' '))
    return attrs
}

// <div class="question__text js-question-text" itemprop="text description">
console.log(
    getAttrs(document.querySelector('div'))
) 
// -> {"class":["question__text","js-question-text"],"itemprop":["text","description"]}
Ответ написан
BRAGA96
@BRAGA96
Например так:
const raw = '<div class="test" data-status="false"></div>';

const $html = parseHTML(raw);

console.log($html.getAttribute('data-status')); //> "false"

function parseHTML(html) {
    const root = document.implementation.createHTMLDocument();
    root.body.innerHTML = html;
    return root.body.children[0];
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы