Как получить конкретную часть строки в node.js?

javascript regex node.js string data-manipulation

1155 просмотра

2 ответа

Я пытаюсь сделать что-то веселое с помощью Twitter API, я хочу искать в Twitter с помощью тега #np (сейчас играю) и разделять твиты по названию песни и имени исполнителя.

давайте предположим, что он нашел этот твит

"Послушайте, что произойдет LEL #np на #SoundCloud"

Я хочу взять название песни, исполнителя песни и привязать к переменным.

и твит тоже может быть примерно таким

"просто потрясающе: D #np Zombie (металлическая обложка от Leo & Stine Moracchioli) https://youtu.be/4e4bAsQ4r30 через @YouTube"

У меня возникают проблемы с пониманием регулярных выражений, так может кто-нибудь показать мне правильный способ сделать этот пример 2?

Автор: nusu Источник Размещён: 08.11.2019 11:08

Ответы (2)


2 плюса

Решение

Едва ли можно найти шаблон при случайном вводе пользователем.
Однако, если большая часть кода сгенерирована каким-либо источником, то часто все еще можно найти образец для сопоставления.

Вероятно, он должен быть отделен от источника.
Так как это облегчает борьбу с группами захвата.

var tweetString = "Listen to It Will Happen by L.E.L #np on #SoundCloud";
var myRegexp = /^(.*)(?: by (.*))#\w+.* on #(\w+)$/;
var song = "";
var artists = "";
var messagesource = "";
match = myRegexp.exec(tweetString);
if (match != null) {
  song = match[1];
  artist = match[2];
  messagesource = match[3];
  console.log("song: " + song);
  console.log("artist: " + artist);
  console.log("messagesource: " + messagesource);
}

var tweetString = "just awesome :D #np Zombie (metal cover by Leo & Stine Moracchioli) https://youtu.be/4e4bAsQ4r30 via @YouTube";
var myRegexp = /^.*#\w+ (.*?)\(.* by (.*)\).* via @(\w+)$/;
var song = "";
var artists = "";
var messagesource = "";
match = myRegexp.exec(tweetString);
if (match != null) {
  song = match[1];
  artist = match[2];
  messagesource = match[3];
  console.log("song: " + song);
  console.log("artist: " + artist);
  console.log("messagesource: " + messagesource);
}

Автор: LukStorms Размещён: 20.08.2016 01:26

2 плюса

Объяснение для @LukStorms:

  • ^ начало строки
  • .*.соответствует любому символу , кроме новых линий ( \n). В *означает , что предыдущая часть должна быть там 0 еще больше раз
  • #буквальный #характер
  • \w+\wсоответствует любой букве, прописные или строчные буквы (или подчеркивания, но это , как правило , не имеет значения); +означает, что предыдущая часть ( \w) должна быть там 1 или более раз
  • (.*?)скобки обернуты вокруг группы захвата (к которой вы действительно можете получить доступ). В этом случае группа будет соответствовать
  • \(буквальный (характер. В \«ускользает» следующий символ, превращая его особенным, или делает его unspecial; P
  • .* 0 или более не-новых символов
  • by буквальный текст
  • (.*) группа захвата, содержащая 0 или более не-новых символов
  • \) буквальный )
  • .* 0 или более не-новых символов
  • via @ буквальный текст
  • (\w+) группа захвата, содержащая одну или несколько букв
  • $ конец строки

Надеюсь это поможет. Если вы пытаетесь выяснить подобные вещи или поток логики в регулярном выражении, вы можете использовать regex101, как сказал @LukStorms. Или используйте что - то я это [regexper] ( https://regexper.com/#%5E . % 23% 5Cw% 2B% 20 (. % 3F)% 5C (. % 20by% 20 (. )% 5C). * % 20via% 20% 40 (% 5Cw% 2B)% 24).

Автор: Whothehellisthat Размещён: 20.08.2016 08:25
Вопросы из категории :
32x32