#regex #cheerio
Вопрос:
Я хотел бы получить атрибуты тега с помощью шаблона. Рассмотрим что-то вроде этого
<foo id="136E2A751268FFDFD3EB6CB6FE91D88F"
captionText-0="bla bla"
captionText-1="bada bing bada boom"
httpUri-0="https://path/to/server0"
httpUri-1="https://path/to/server2">foo 1-2</foo>
используя cheeriojs, что-то вроде следующего (что, конечно, не работает)
const attribs = [
'captionText',
'httpUri'
]
const tag = {}
attribs.forEach(a => {
const re = `${a}-[0-9] `
const attr = $(e).attr(/re/)
if (attr) {
tag[re] = attr
}
})
предложения?
Ответ №1:
Если вы просто сопоставляете данные со списком, то:
// cheeiro output of element.attribs
var attribs = {
'captionText-1': '1',
'captionText-2': '2',
'httpUri-3': 3,
'httpUri-4': 4
};
// list of values to match against
var match_list = ['captionText', 'httpUri'];
// holds matched key/value attributes
var tag = {};
// loops through attribs object
for (var key in attribs) {
// returns boolean, partial matches current attribute against each value in match list
// var is_matched = match_list.some(function(item) {return key.indexOf(item) > -1;});
var is_matched = match_list.some(function(item) {return key.match(new RegExp('^' item '-[0-9] ', 'gi'));});
if (is_matched) {
tag[key] = attribs[key];
}
}
Комментарии:
1. боже, это не тот ответ, который я искал, но он делает свое дело. Я проголосую за вас, но подождите, прежде чем отмечать это как ответ, на случай, если кто-то другой внесет свой вклад в то, могу ли я сопоставить с помощью регулярных выражений. Большое спасибо!
2. Обновил ответ, используя ваше регулярное выражение. Прокомментировал предыдущий метод.