2016-08-20 3 views
-2

트위터 API로 재미있는 일을하려고합니다. #np (지금 재생 중) 태그로 트위터에서 검색하고 노래 이름과 아티스트 이름으로 트윗을 분할하고 싶습니다.node.js에서 문자열의 특정 부분을 가져 오는 방법은 무엇입니까?

는 내가 노래 제목, 노래 아티스트을 변수에 바인딩 할이 트윗

"그것은 #SoundCloud에 L.E.L의 #np로 실행에 들어"

을 발견한다고 가정 할 수 있습니다.

과 트윗은 다음과 같이 될 수도

"그냥 끝내 : @YouTube를 통해 D #np 좀비 (레오 & 스타 인 Moracchioli에 의해 금속 덮개) https://youtu.be/4e4bAsQ4r30"나는에 문제가 받고 있어요

정규 표현식을 이해하면 누군가 나에게이 2 가지 예제를 수행하는 적절한 방법을 보여줄 수 있습니까?

+0

직장에서 명확한 형식이 아니라면이를 분석하는 것이 매우 어려울 것입니다. 특히 같은 짹짹과 함께 다른 일반 텍스트가있는 경우. 따라서 "수신 (수신)"이 텍스트 일 ​​경우 무시하십시오. "It Will Happen"이 트랙 타이틀이라면, 그것을 붙잡고 싶을 것입니다. 그러나 트랙 이름과 다른 텍스트의 차이점을 어떻게 설명 할 수 있습니까? 이것은 단지 예일뿐입니다. 그러나 이것이 얼마나 어려울 지에 대한 아이디어를 줄 것입니다. – Whothehellisthat

+0

그런 짹짹이 "닮은 것"을 통제 할 수 있다면 그걸 분석 할 수있는 방법을 찾아 낼 수 있습니다. 예를 들어, '{track title} by {artist} # np'는 부품에 중괄호가 표시되어 있기 때문에 쉽게 파악할 수 있습니다. 더 명확한 구조없이 더 구체적인 도움을 줄 수는 없지만. 죄송합니다. – Whothehellisthat

+0

정규 표현식에 대해 더 많은 질문이 있고 그 표현이 가능하다면 모두 도와 드리겠습니다. – 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/)가 종종 권장됩니다. 그리고 자바 스크립트에서 사용 된 regex flavor를 실험하기 위해 나는 [regexr.com] (http://www.regexr.com/)을 추천한다. 예제 또한 좋은 참고서가있다. 그리고 PCRE 풍미를 실험하기 위해 [regex101] (https://regex101.com/)이 예제를 보여주기 위해 stackoverflow에서 자주 사용됩니다. – LukStorms

2

@LukStorms에 대한 설명 : 문자열의

  • ^ 시작
  • .*.은 새 줄 (\n)을 제외한 모든 문자와 일치합니다. * 이전 부분이있을 더 0 번 이상
  • # 문자 # 문자
  • \w+\w 일치하는 모든 문자, 대문자 또는 소문자로해야 의미 (또는 밑줄,하지만 일반적으로 문제가되지 않습니다) +은 이전 부분 (\w)이 1 번 이상 있어야 함을 의미합니다.
  • (.*?) 대괄호는 캡처 그룹 (실제로 액세스 할 수 있음)을 둘러 쌉니다. 이 경우 그룹은
  • \( 문자를 ( 문자와 일치시킵니다.\는 특별한 선회하거나 unspecial하고, 다음 문자를 "이스케이프"; P
  • .* 0 이상의 비 - 개행 문자
  • by 문자 텍스트
  • (.*) 0 이상의 비 - 개행 문자가 포함 된 캡처 그룹 문자
  • \) 문자 )
  • .* 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

관련 문제