#javascript #regex #string #substring #font-family
#javascript #регулярное выражение #строка #подстрока #семейство шрифтов
Вопрос:
Я пытаюсь получить семейство шрифтов из строки, представляющей части html. Семейством шрифтов может быть любой шрифт, поэтому я думал об использовании регулярного выражения. Строка также может содержать x символов. Примером ввода может быть:
'<body id="foo" class="bar"><span style="color: #d4d4d4;background-color: #1e1e1e;font-family: Consolas">Example Text</span></body>'
Идеальным результатом будет «Consolas». Однако я не очень хорошо разбираюсь в регулярных выражениях и не могу придумать подходящее регулярное выражение.
Данные поступают в виде строкового представления элемента
РЕШЕНИЕ: Спасибо terrymorse (комментарии) и Gerardo Cabrera (принятый ответ)! Я не знал, как преобразовать html-строку в элемент. Удалось извлечь семейство шрифтов на основе их отзывов
Комментарии:
1. Не за горами куча отрицательных голосов. Прежде чем они появятся, вы можете добавить свою собственную попытку.
2. Рассматривали ли вы возможность использования DOM вместо синтаксического анализа html-строк? например
element.style
3. @Evert К сожалению, данные поступают в виде строкового представления элемента
4. @evgengorbunkov для чего нужны отрицательные голоса?
5. @terrymorse Спасибо, вы правы! Я не знаю, как пометить комментарий в качестве ответа, поэтому я задал вам вопрос в своем вопросе, лол
Ответ №1:
Как все говорят, не стоит использовать регулярное выражение для попытки анализа HTML. Просто используйте DOM следующим образом:
// Like the user terrymorse did
let div = document.createElement('div');
div.innerHTML = '<body id="foo" class="bar"><span style="color: #d4d4d4;background-color: #1e1e1e;font-family: Consolas">Example Text</span></body>';
let children = div.children;
console.log(children[0].style.fontFamily);
Вы также можете использовать функции разделения и массива, чтобы найти подобное свойство, но опция DOM намного лучше.
var s = '<body id="foo" class="bar"><span style="color: #d4d4d4;background-color: #1e1e1e;font-family: Consolas">Example Text</span></body>';
var x = s.split(";");
var y = x.filter(e => e.includes("font-family"))[0].split('"')[0];
var result = y.replace("font-family: ", "");
console.log(result)