CamelCase2snake_case ()


13

ক্যামেলকেসড পাঠ্যটিকে সাপ_কেসে রূপান্তর করতে একটি ফাংশন লিখুন: FunctionForHTMLManipulationহয়ে যায়function_for_html_manipulation

ইনপুট পাঠ্যটি বহু ভাষায় একক উপযুক্ত শনাক্তকারী হবে। এটি অবশ্যই একটি ইংরেজি বর্ণ দিয়ে শুরু করা উচিত, তারপরে যেকোন সংখ্যক ইংরেজি বর্ণ বা অঙ্কগুলি অনুসরণ করা উচিত। অন্য কোনও অক্ষর (স্পেস, চিহ্ন, ইত্যাদি) অনুমোদিত নয়।

ক্যামেল কেসড পাঠ্যের প্রত্যেকটি "শব্দ" মূল পাঠের শুরুতে বা অঙ্কের পরে অবিলম্বে শুরু হবে এবং শূন্য বা তার বেশি অক্ষর অনুসরণ করবে, একই ক্ষেত্রে সমস্ত। অঙ্কের গোষ্ঠীগুলি পৃথক শব্দ হিসাবে বিবেচিত হবে তবে অপরিবর্তিত রয়েছে through

অন্য কথায়, বড় হাতের অক্ষরের পরে একটি ছোট অক্ষর শব্দের বিরতি নির্দেশ করে। একে অপরের পাশের যে কোনও বর্ণ এবং সংখ্যা একটি শব্দ বিরতি নির্দেশ করে। একটি বড় হাতের অক্ষর এবং পরে একটি বড় হাতের অক্ষর এবং একটি ছোট হাতের অক্ষর একটি শব্দ বিরতি নির্দেশ করে।

...lU...=> ...l_u...
...l9...=> ...l_9...
...U9...=> ...u_9...
...9l...=> ...9_l...
...9U...=> ...9_u...
...UUl...=>...u_ul...

উভয় Buy24Beersএবং buy24beersহয়ে buy_24_beers
MacDonaldAndObrianহয়ে mac_donald_and_obrian
MACDonaldAndOBrianহয়ে mac_donald_and_o_brian


6
" MACDonaldAndOBrianহয়ে যায় mac_donald_and_o_brian" - কেন?
কিওয়ারটি

2
@ কিওয়ার্টি কারণ আমি ভেবেছিলাম এই নামগুলি মজাদার হবে। আপনি যদি বিধিটি সম্পর্কে জিজ্ঞাসা না করেন, যা ...UUl...=> দ্বারা আচ্ছাদিত ...u_ul...
সিজে ডেনিস


@ ডিজিটালট্রামা আশ্চর্যজনকভাবে আমার মূল প্রশ্নের কাছাকাছি কিন্তু একটিতে দুটি প্রশ্ন হওয়ার অভিযোগ ছাড়াই এবং কোনও ডাউনভোট নেই! সবচেয়ে বড় পার্থক্য হ'ল ALLCAPS স্ট্রিংগুলির চিকিত্সা। প্রশ্নটি আগে জিজ্ঞাসা করা হয়েছিল কিনা তা অনুসন্ধান করার জন্য আমি অনুসন্ধান করেছিলাম কিন্তু এটি খুঁজে পেলাম না।
সিজে ডেনিস

1
@ggorlen ...ইঙ্গিত করে যে এটি একটি স্ট্রিংয়ের মাঝখানে রয়েছে।
সিজে ডেনিস

উত্তর:


7

রেটিনা , 61 37 বাইট

r1>`[A-Z]?[a-z]+|[A-Z]+|\d+
_$&
T`L`l

এটি অনলাইন চেষ্টা করুন! (পুরো টেস্ট স্যুটটি চালানোর জন্য সামান্য সংশোধিত।)

ব্যাখ্যা

আন্ডারস্কোরগুলি সন্নিবেশ করানোর জন্য শব্দের সীমানা সন্ধান করার পরিবর্তে আমরা প্রতিটি শব্দের সাথে কেবল মিলিয়ে একটি এবং প্রেন্ডেন্ড করি _UUlনিয়মের কারণে বাম থেকে শব্দের সাথে মিল পাওয়া কিছুটা বিরক্তিকর , তবে .NET- র ডান থেকে বামের মিলটি ব্যবহার করে আমরা সহজেই লোভের সাথে শব্দগুলি মেলাতে পারি। একটি অগ্রণী এড়ানোর _জন্য, আমরা রেটিনার সীমা ব্যবহার করি।

r1>`[A-Z]?[a-z]+|[A-Z]+|\d+
_$&

rডান-থেকে-বাম মোড সক্রিয় 1>প্রথম ম্যাচ (থেকে কাউন্টিং বাম থেকে ডানে) ব্যতীত প্রক্রিয়া সবকিছু অক্ষিপট বলে। এরপর "শব্দ" এর চার রকমের আছে: Ulll, lll, UUU, ddd। এগুলি প্রদত্ত প্যাটার্নের সাথে সহজেই মিলে যায়। প্রতিস্থাপনটি কেবল _শব্দের পরে একটি অনুসরণ করে।

T`L`l

রূপান্তরটি সম্পূর্ণরূপে এটি সহজভাবে উপরের কেস কে লোয়ার কেসে পরিণত করে।


6

জাভাস্ক্রিপ্ট (ES6), 79 বাইট

s=>s.match(/[A-Z]+(?=[A-Z][a-z]|\d|$)|[A-Z]?[a-z]+|\d+/g).join`_`.toLowerCase()

3

জাভাস্ক্রিপ্ট (ES6), 89 বাইট

s=>s.replace(/\d(?=\D)|\D(?=\d)|[a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z])/g,"$&_").toL‌​owerCase()

2

পাওয়ারশেল, 77 বাইট

নীলের উত্তরের ভিত্তিতে ।

$args-creplace'\d(?=\D)|\D(?=\d)|[a-z](?=[A-Z])|.(?=[A-Z][a-z])','$&_'|% *wer

কম গল্ফ পরীক্ষা স্ক্রিপ্ট:

$f = {

$args-creplace'\d(?=\D)|\D(?=\d)|[a-z](?=[A-Z])|.(?=[A-Z][a-z])','$&_'|% toLower

}

@(
    ,("Buy24Beers", "buy_24_beers")
    ,("buy24beers", "buy_24_beers")
    ,("MacDonaldAndObrian", "mac_donald_and_obrian")
    ,("MACDonaldAndOBrian", "mac_donald_and_o_brian")
    ,("BigD", "big_d")
) | % {
    $s,$expected = $_
    $result = &$f $s
    "$($result-ceq$expected): $result"
}

আউটপুট:

True: buy_24_beers
True: buy_24_beers
True: mac_donald_and_obrian
True: mac_donald_and_o_brian
True: big_d


1

পাওয়ারশেল, 68 92 বাইট

সংক্ষিপ্তভাবে মুছে ফেলা হয়েছে, ভুল RegEx ব্যবহারের জন্য + 24 বাইট।

($args-creplace'\d(?=\D)|\D(?=\d)|[a-z](?=[A-Z])|.(?=[A-Z][a-z])','$&_').Trim('_').ToLower()

এটি অনলাইন চেষ্টা করুন!

মূলত জাভাস্ক্রিপ্ট সমাধান হিসাবে একই।


এটি buy24beersএবং সঙ্গে কাজ করে না MACDonaldAndOBrian। দুঃখিত।
mazzy

1
@ মাইজি স্থির, ধন্যবাদ।
গ্যাব্রিয়েল মিলস

0

ফ্যাক্টর, 140 বাইট

[ R/ [a-z][A-Z][a-z]/ [ dup from>> swap dup to>> swap seq>> subseq R/ [A-Z][a-z]/ [ "_" prepend ] re-replace-with ] re-replace-with >lower ]

Ungolfed:

: slice>subseq ( slice -- subseq )
dup from>> swap dup to>> swap seq>> subseq ;

: camel-case>snake-case ( string -- string' )
    R/ [a-z][A-Z][a-z]/ [
        slice>subseq R/ [A-Z][a-z]/
        [ "_" prepend ] re-replace-with
    ] re-replace-with >lower ;

0

লুয়া , 135 বাইট

function snake(s)return s:gsub('%f[^%l]%u','_%1'):gsub('%f[^%a]%d','_%1'):gsub('%f[^%d]%a','_%1'):gsub('(%u)(%u%l)','%1_%2'):lower()end

এটি অনলাইন চেষ্টা করুন!

এই সমাধানটি সি এর চরিত্র শ্রেণি (ছোট হাতের %lঅক্ষর %u, বর্ণমালা %a, অঙ্ক %d), সীমান্ত স্বরলিপি ( %f[]) এর জন্য লুয়ার শর্টহ্যান্ড স্বরলিপি থেকে উপকৃত হয় এবং পুরো ম্যাচ থেকে অন্য কোনও ক্যাপচারের অভাবে পুরো প্রথম ক্যাপচার হিসাবে যুক্ত হয়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.