Мне нравится анализировать HTML с регулярными выражениями. Я не пытаюсь разбирать идиот HTML, который намеренно нарушен. Этот код является моим основным парсером (версия Perl):
$_ = join "",; tr/\n\r \t/ /s; s/\n/>\n/g; s/\n ?\n/\n/g;
s/^ ?\n//s; s/ $//s; print
Он называется htmlsplit, разбивает HTML на строки, с одним тегом или фрагментом текста в каждой строке. Затем линии могут быть обработаны другими текстовыми инструментами и сценариями, такими как grep , sed , Perl и т. Д. Я даже не шучу :) Наслаждайтесь.
Достаточно просто переписать мой скрипт Perl-all-first Perl в приятную поточную вещь, если вы хотите обрабатывать огромные веб-страницы. Но это действительно не обязательно.
Бьюсь об заклад, я заберусь для этого.
Против моего ожидая, что это получило некоторые upvotes, поэтому я предлагаю несколько правильных выражений:
/(<.*?>|[^<]+)\s*/g # get tags and text
/(\w+)="(.*?)"/g # get attibutes
Они хороши для XML / XHTML.
С небольшими вариациями он может справиться с беспорядочным HTML ... или сначала конвертировать HTML -> XHTML.
Лучший способ записи регулярных выражений - в Lex / Yacc стиль, а не непрозрачные однострочные или прокомментированные многострочные чудовища. Я не делал этого здесь; эти им едва ли нужны.
Это оказалось проблемой конфигурации babel.
Когда я изменил код, чтобы он выглядел следующим образом, он работал:
import path from 'path';
import { Model } from 'objection';
import { BaseModel } from './base.model';
export class Group extends BaseModel {
static get tableName() {
return 'groups';
}
static get relationMappings() {
return {
users: {
modelClass: path.join(__dirname, 'user.model'),
relation: Model.ManyToManyRelation,
join: {
from: 'groups.id',
through: {
from: 'users_groups.group_id',
to: 'users_groups.user_id'
},
to: 'users.id',
}
}
};
}
}
import path from 'path';
import { Model } from 'objection';
import { BaseModel } from './base.model'
export class User extends BaseModel {
static get tableName() {
return 'users';
}
static get relationMappings() {
return {
groups: {
modelClass: path.join(__dirname, 'group.model'),
relation: Model.ManyToManyRelation,
join: {
from: 'users.id',
through: {
from: 'users_groups.user_id',
to: 'users_groups.group_id'
},
to: 'groups.id'
}
}
};
}
}