#javascript #regex #database #web-scraping
#javascript #регулярное выражение #База данных #веб-очистка
Вопрос:
Поэтому мне понадобится проверка с помощью регулярных выражений для нескольких вещей. Имена могут выглядеть так, поэтому я бы искал строку имени ключа.
name: 'Pop Icons #23 Paulie Pigeon Pinstripe Jersey NYCC'
or
name: 'Pop Marvel 80th 526 Captain Marvel / Mar-Vell First Appearance'
or
name: 'Pop 2001: A Space Odyssey #823 Dr. Frank Poole'
or
name: '389 Blue-Eyes White Dragon'
or
name: 'Pop Up Movie Town #05 Kevin with Up House'
в настоящее время у меня есть
var numbers = /#[1-9]d*b/g;
var matchNumber = title.splitTitle.match(numbers);
return {
number: matchNumber amp;amp; matchNumber[0],
name: title.splitTitle,
image: title.image,
};
Выше title имеет то, что называется splitTitle и image, поэтому его объект выглядит следующим образом
title: {
splitTitle: 'Pop Marvel 80th 526 Captain Marvel / Mar-Vell First Appearance'
image: '*string that links to an image of the funko pop'
в настоящее время это может дать мне номера funko только в том случае, если перед номером стоит ‘#’. Мне нужно было бы иметь возможность получить номер для функции funko pop во всех приведенных выше строках. Мне не понадобились бы дополнительные данные, как в Pop 2001, поскольку это всего лишь год. Я пытаюсь создать базу данных funko, и мне нужен только фактический номер funko pop. Одна из моих мыслей заключается в том, чтобы убедиться, что цифра funko pop не имеет длины 4 цифры, так как это сделало бы ее, скорее всего, годом, и при поиске в Интернете не видно, что funko pop # s больше 3 цифр. Но тогда это привело бы к чему-то вроде 80th, который также является просто серией, поскольку он содержит менее 4 цифр. Любая помощь была бы потрясающей!
Комментарии:
1.Если вам нужно только число, вы можете использовать группу захвата
#([1-9]d*)b
regex101.com/r/oFKJ2X/12. Не могли бы вы явно указать, каким должен быть результат для каждого ввода?
3. @TedBrownlow, да, поэтому каждый вывод должен быть таким объектом { номер: 526, имя: Pop Marvel 80th 526 Капитан Марвел / Мар-Велл Первое появление, изображение: ссылка на изображение }, но он должен быть способен работать для всех этих разных строк, как веб-сайт, с которого я извлекаю не строится одинаково во всех сериях funko pop
4. Может ли быть только одно вхождение числа в формате
#23
5. @Thefourthbird мне понадобился бы только funko pop #, мне не нужен был бы номер даты или номер серии, то есть 2001 или 80-й. просто funko #, например, 23 или 526.
Ответ №1:
Вы можете использовать границы слов b
и сопоставлять от 1 до 3 цифр.
bd{1,3}b
Если после него не может быть a :
, вы можете использовать отрицательный прогноз (?!:)
Демонстрация регулярных выражений
[
"Pop Icons #23 Paulie Pigeon Pinstripe Jersey NYCC",
"Pop Marvel 80th 526 Captain Marvel / Mar-Vell First Appearance",
"Pop 2001: A Space Odyssey #823 Dr. Frank Poole",
"389 Blue-Eyes White Dragon",
"Pop Up Movie Town #05 Kevin with Up House",
"test 42:"
].forEach(s => {
let m = s.match(/bd{1,3}b(?!:)/);
console.log(m ? `${m[0]} --> match` : `${s} --> no match`);
});