2016-06-01 3 views
0

jekyll 사이트에 rouge 쉘 렉서를 확장 중이며 다음을 원합니다.문자열을 일치 시키지만 루비에서 일치하는 부분 문자열 만 캡처합니다.

  1. 일치 --word. 캡처 word, 폐기 --.
  2. 일치 <word>. word을 캡처하고 <>을 모두 버립니다.
  3. 일치 word=anyNumber.word. 캡처 wordanyNumber.word, 폐기 =.

우선 아무것도 일치하지 않는, /(?=-+)\w/을 시도하고 나는 리버스 word/-+(?=\w*)/으로 폐기하려고 노력하고는했다. 내가 뭘 잘못하고 있니?

+1

작은 예제를 추가하고 원하는 결과가 도움이 될 것입니다. 그렇게 할 경우, 각 입력 값 ('str = "..."')에 변수를 할당하여 독자가 정의하지 않고 변수를 참조 할 수 있도록하십시오. –

답변

2

나는 당신이 이것을 생각하고 있다고 생각합니다. 미리보기 또는 둘러보기가 필요하지 않습니다.

str = "foo --word1 <word2> word3=anyNumber.word4" 

p /--(\w+)/.match(str).captures 
# => ["word1"] 

p /<([^>]+)>/.match(str).captures 
# => ["word2"] 

p /(\w+)=([\w.]+)/.match(str).captures 
# => ["word3", "anyNumber.word4"] 
0
str = "--hopscotch <dodgeball> cat=9.lives" 

str[/(?<=\-\-)\w+/] 
    #=> "hopscotch" 
str[/(?<=\<)\w+(?=\>)/] 
    #=> "dodgeball" 
str.scan /(?:\w+(?=\=))|(?<=\=)\d+\.\w+/ 
    #=> ["cat", "9.lives"]