2016-08-20 15 views
-2

TwitterのAPIで楽しいことをしようとしています #np(今再生中)タグでTwitterで検索し、曲名とアーティスト名でツイートを分割したいと考えています。node.jsの文字列の特定の部分を取得する方法は?

はそれが私が歌名、曲のアーティストを取得し、変数にバインドするこのつぶやき

「それは#SoundCloudにL.E.Lの#NPで実行されるに耳を傾ける」

を発見したことを前提としています。

とつぶやきも

"だけで素晴らしい:D #NPゾンビ(レオ&スタインMoracchioliによる金属カバー)https://youtu.be/4e4bAsQ4r30 @YouTubeを経由して、" このようなものになることができ

私はとのトラブルを取得しています正規表現を理解するので、誰かが私にこの2つの例を行う適切な方法を示すことができますか?

+0

作業中に明確なフォーマットがない限り、これを解析することは非常に困難です。特に、同じツイートを持つ他の通常のテキストがある場合。したがって、 "Listen(ing)to"がテキストだけの場合、無視します。 「It Will Happen」がトラックタイトルであれば、それをつかみたいと思う。しかし、どのようにトラック名と他のテキストの違いを教えてください?これはほんの一例ですが、それはどれほど難しいかをあなたに知らせるべきです。 – Whothehellisthat

+0

このようなツイートがどのように見えるかを何らかの形で支配しているなら、それを解析する方法を見つけ出すことができます。例えば、{artist}#npの '{track title}は、それらの中括弧でマークされているので、分かりやすいでしょう。しかし、より明確な構造がなければ、より具体的な助けを与えるのは難しいです。ごめんなさい。 – Whothehellisthat

+0

regexとそれが可能なことについて、より具体的な質問がある場合は、私も同じことをお手伝いしたいと思います。 – Whothehellisthat

答えて

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); 
 
}

+0

ありがとうありがとうございます詳細オプションで検索し、それらの残りの部分を除外しない限り、ランダムなユーザー入力のパターンを見つけるのは難しいです。答えは、私はまだ正規表現の理解に問題があります。それに取り組むための詳細な情報源? :) – nusu

+0

[regular-expressions.info](http://www.regular-expressions.info/)をよくお勧めします。また、javascriptで使われている正規表現のフレーバーを試してみるには、[regexr.com](http://www.regexr.com/)もお勧めします。そして、PCREフレーバー[regex101](https://regex101.com/)で実験することは、ここで例を示すためにstackoverflowでよく使われます。 – LukStorms

2

@LukStormsの説明:文字列の

  • ^開始
  • .*.は、改行以外の文字(\n)と一致します。 *は、前の部分があることより0回以上
  • #リテラル文字#
  • \w+\wマッチ任意の文字、大文字または小文字べきであることを意味(またはアンダースコアが、それは、通常は問題ではありません)。 +は、前の部分(\w)が1回以上存在することを意味します。
  • (.*?)ブラケットはキャプチャグループ(実際にアクセスできる)を囲んでいます。この場合、グループは
  • \(の文字を(と一致させます。\は次の文字、特別にそれを回す、またはそれはunspecial作る「エスケープ」; P 0以上の非改行を含む
  • .* 0以上の非改行文字
  • byリテラルテキスト
  • (.*)キャプチャグループ文字
  • \))
  • .* 0以上の非改行文字
  • via @リテラルリテラルテキスト
  • (\w+)一個の以上の文字を含むキャプチャグループ
  • $文字列
  • の終わり

・ホープ、このことができます。 @LukStormsが言っているように、この種のものや正規表現のロジックの流れを理解しようとするなら、regex101を使うことができます。または、私が使用するものは、[正規表現](https://regexper.com/#%5E%23%5Cw%2B%20(.%3F)%5C(.%20by%20(.)%5C)。*%20via%20%40 (%5Cw%2B)%24)。

+0

ありがとうございますそれは私に多くの助け:) – nusu

関連する問題