2012-02-21 2 views
3

교체 된 문자열로 다시 첫 번째 일치하는 문자를 추가하는 '~'루비 GSUB 정규식 내가 그 이하 대체 루비의 작은 정규식 조각이

>> "name: Name, phone_number: Phone Number, inactive: Inactive ".gsub(/[:]\s[\w]/, ': ~') 

=> "name: ~ame, phone_number: ~hone Number, inactive: ~nactive " 

어떻게

=> "이름 : ~ 이름, PHONE_NUMBER : ~ 전화 번호, 비활성 : ~ 비활성"

보다 내가 즉, 대체 문자열로 다시 첫 번째 문자를 추가 할 GSUB 식을 수정 ks

답변

3

먼저 하나의 문자/특수 문자 그룹을 중심으로 []이 필요하지 않습니다. 여러 문자를 그룹화하려는 경우에만 의미가 있습니다. 정규식은 /:\s\w/과 같습니다.

문제를 해결하기 위해, 당신은 캡처 그룹을 사용하여 캡처 편지 다시 삽입 할 수 있습니다 :

s.gsub(/:\s(\w)/, ': ~\1') 
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive " 

를 또는 처음에 편지를 대체 할 수있는 내다을 사용

s.gsub(/:\s(?=\w)/, ': ~') 
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive " 

어쩌면 /:\s+(?=\w)/을 사용하여 다음 문자 앞에 두 개 이상의 공백을 허용 할 수 있습니다.

+0

대단히 감사합니다. Niklas – patrickandroid