Ruby 클래스 작업 : 문자열 대문자 화
Sep 23 2020
저는 Ruby에서 Classes로 작업하는 방법에 대해 고심하고 있으며이 영역에 대한 통찰력을 높이고 싶습니다. 현재 저는 각 단어의 시작 부분이 대문자로 된 문자열을 변환하는 다소 간단한 작업이 있습니다. 예를 들면 :
Not Jaden-Cased: "How can mirrors be real if our eyes aren't real"
Jaden-Cased: "How Can Mirrors Be Real If Our Eyes Aren't Real"
이것은 현재 내 코드입니다.
class String
def toJadenCase
split
capitalize
end
end
#=> usual case: split.map(&:capitalize).join(' ')
산출:
Expected: "The Moment That Truth Is Organized It Becomes A Lie.",
instead got: "The moment that truth is organized it becomes a lie."
답변
1 CarySwoveland Sep 23 2020 at 01:30
String인스턴스 메서드를 추가 하여 핵심 클래스를 오염시키지 않는 것이 좋습니다 . 대신 메서드에 인수를 추가하여 문자열을 보관하십시오. 다음과 같이 문자열을 축소 한 다음 gsub정규식과 함께 사용하면 됩니다.
def to_jaden_case(str)
str.downcase.gsub(/(?<=\A| )[a-z]/) { |c| c.upcase }
end
to_jaden_case "The moMent That trUth is organized, it becomes a lie."
#=> "The Moment That Truth Is Organized, It Becomes A Lie."
Ruby의 정규식 엔진은 다음 작업을 수행합니다.
(?<=\A| ) : use a positive lookbehind to assert that the following match
is immediately preceded by the start of the string or a space
[a-z] : match a lowercase letter
(?<=\A| )공백이 아닌 다른 문자가 일치에 선행하지 않는다는 것을 주장하는 부정적인 lookbehind 로 대체 될 수 있습니다 (?<![^ ]).
사용하여 해당 공지 사항 문자열 #의 GSUB를 합니다 (달리 정규 표현식으로 분할 -process- 가입 춤), 여분의 공백이 유지됩니다.
공백이 정규식에 의해 일치 될 때 종종 공백 ( \s)이 일치하는 것을 보게 됩니다. 예를 들어 여기에서는 /(?<=\A|\s)[a-z]/잘 작동하지만 공백과 일치하는 경우 주로 줄 바꿈 ( \n) (공백, 탭 및 기타 몇 가지 문자) 과도 일치하기 때문에 문제가 발생 합니다. 내 조언은 공백이 일치하는 경우 공백 문자를 일치시키는 것입니다. 탭도 일치해야하는 경우 문자 클래스 ( [ \t])를 사용하십시오.
1 Ayudh Sep 22 2020 at 22:33
시험:
def toJadenCase
self.split.map(&:capitalize).join(' ')
end