روبي ريجكس لتحويل غلاف الأفعى إلى باسكالكاسينج?
-
12-12-2019 - |
سؤال
لقد أنشأت إطار عمل ويب يستخدم الوظيفة التالية:
def to_class(text)
text.capitalize
text.gsub(/(_|-)/, '')
end
لتحويل أسماء الدليل التي هي snake_cased
أو hyphen-cased
في PascalCased
أسماء فئة لمشروعك.
المشكلة هي ، وظيفة إزالة فقط _
و -
, ، ولا تكتب الحرف التالي بأحرف كبيرة.باستخدام .capitalize
, ، أو .upcase
, ، هل هناك طريقة لتحقيق جعل الخاص بك snake/hyphen_/-cased
أسماء في السليم PascalCased
أسماء فئة?
المحلول
يؤدي هذا إلى تقسيم السلسلة ذات الغلاف _ إلى مصفوفة;الاستفادة من كل عضو والغراء الصفيف مرة أخرى إلى سلسلة:
def to_pascal_case(str)
str.split(/-|_/).map(&:capitalize).join
end
p to_pascal_case("snake_cased") #=>"SnakeCased"
لا يعمل الرمز الخاص بك لعدة أسباب:
- يتم تجاهل الكائن الناتج من طريقة الكتابة بالأحرف الكبيرة-أنت
يجب أن تفعل شيئا مثل
text.capitalize!
أوtext = text.capitalize
. - لكن ال
capitalize
طريقة فقطupcase
الحرف الأول من السلسلة, ليس الحرف الأول من كل كلمة.
نصائح أخرى
gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
القضبان لديها طريقة مماثلة تسمى كاميليز.انها تستفيد أساسا كل جزء من سلسلة تتكون من [a-z0-9]
ويزيل كل شيء آخر.
ربما يمكنك الغولف وصولا الى شيء أصغر ، ولكن:
txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
لا تنتمي إلى StackOverflow