روبي ريجكس لتحويل غلاف الأفعى إلى باسكالكاسينج?

StackOverflow https://stackoverflow.com//questions/10677546

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top