কীভাবে "উট কেস" কে "উটের কেসে" রূপান্তর করবেন?


174

আমি একটি জাভাস্ক্রিপ্ট Regex কমান্ড ভালো কিছু চালু করতে পেতে চেষ্টা করে থাকেন "thisString"মধ্যে "This String"কিন্তু নিকটস্থ আমি অর্জিত করেছি, একটি চিঠি প্রতিস্থাপন করা হয় ভালো কিছু ফলে "Thi String"বা "This tring"। কোন ধারনা?

নির্মল আমি একটি চিঠি ভিত্তি সরলতা সব ব্যবস্থা করতে সক্ষম, আমি Regex সঙ্গে ক্ষমতাশালীরা ন্যায়পরায়ণ নয়, এবং বিভাজন "somethingLikeThis"মধ্যে "something Like This"যেখানে আমি সমস্যা হচ্ছে।



6
এটি কীভাবে এর সদৃশ। যা কিছু হয় তা হ'ল প্রথম চরিত্রটিকে মূল স্ট্রাইটে পরিণত করা, আমি যা করতে চাই তার কাছাকাছি কিছুই।
একটি উইজার্ড এটি করেছে

হুম এটি প্রশ্নের একটি ডুপ নয়, তবে ফলাফল একই হতে পারে। বা আপনি কি করতে চান তা না? আরও বিস্তারিত বলুন?
সুপারফ্রো

রেজেক্স অনুশীলনের জন্য আমি RegExr বা এক্সপ্রেসোকে পরীক্ষা করার পরামর্শ দিই এবং কেবলমাত্র এসও-তে সমস্ত রেজেক্স প্রশ্নের দিকে তাকান এবং সেগুলির উত্তর দেওয়ার চেষ্টা করি। Regexs বিশ্বের সহজ জিনিস নয়, তবে কেবল মনে রাখবেন যে যদি আপনার রেজেক্সগুলি আপনাকে বিভ্রান্ত করছে তবে তা এটিকে বিভক্ত করুন এবং টুকরো টুকরো করে কাজ করুন।
josh.trow

উত্তর:


399
"thisStringIsGood"
    // insert a space before all caps
    .replace(/([A-Z])/g, ' $1')
    // uppercase the first character
    .replace(/^./, function(str){ return str.toUpperCase(); })

প্রদর্শন

This String Is Good


1
ভাল মানুষ, এটি বিভক্ত। : শুধু Bobince পরামর্শ স্মরণ stackoverflow.com/questions/1732348/...
josh.trow

আপনি কি নিশ্চিত যে এটি আইইয়ের সাথে সামঞ্জস্যপূর্ণ? IETester7 এ সবেমাত্র চেষ্টা করে একটি ত্রুটি পেয়েছি।
strongriley

3
এছাড়াও যোগ করা হচ্ছে: আপনি যদি একসাথে রাখতে চান এমন সমস্ত ক্যাপ সংক্ষিপ্ত বিবরণ থাকে তবে আপনি প্রথম রেজেক্সকে "/ ([জেড]] [এজে]) /"
জ্যাকফারস্টার

2
"এটি" -> "এটি" (অযাচিত উপসর্গের স্থান)। সম্ভবত এটি এটিকে পরিবর্তন করুন: str.slice (0, 1) .toUpperCase () + str.slice (1) .replace (/ ([AZ]) / g, '$ 1')
মার্ক ভাইংরিব

1
@ কোল্ডবার্বারাস আপনি ব্যবহার করতে পারেন: str.replace(/((?<!^)[A-Z](?![A-Z]))(?=\S)/g, ' $1').replace(/^./, s => s.toUpperCase() );এটি রূপান্তরিত userIDহবে User ID, এবং এটি রূপান্তরিত userIDFieldহবেUser ID Field
ইউজিন মালা

87

বিশেষত xMLHTTPRequest- তে মূলধনের রাজধানীগুলির পরিচালনা করার ক্ষেত্রে আমার এই বিষয়ে নিষ্ক্রিয় আগ্রহ ছিল। তালিকাভুক্ত ফাংশনগুলি "এক্সএমএল এইচটিটিপি অনুরোধ" বা "এক্সএমএল এইচটিটিপি অনুরোধ" উত্পাদন করবে, খনিটি "এক্সএমএল এইচটিটিপি অনুরোধ" উত্পাদন করবে।

function unCamelCase (str){
    return str
        // insert a space between lower & upper
        .replace(/([a-z])([A-Z])/g, '$1 $2')
        // space before last upper in a sequence followed by lower
        .replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3')
        // uppercase the first character
        .replace(/^./, function(str){ return str.toUpperCase(); })
}

গিস্টটিতে একটি স্ট্রিং.প্রোটোটাইপ সংস্করণও রয়েছে


একই সাথে 2 টি প্রতিস্থাপনের কলগুলি অর্জন করা যেতে পারে:str.replace(/((?<!^)[A-Z](?![A-Z]))(?=\S)/g, ' $1').replace(/^./, s => s.toUpperCase() )
ইউজিন মালা

22

এটি সংক্ষিপ্তভাবে রেজেক্স লুক হেড ( লাইভ ডেমো ) দিয়ে করা যেতে পারে :

function splitCamelCaseToString(s) {
    return s.split(/(?=[A-Z])/).join(' ');
}

(আমি ভেবেছিলাম যে g(বিশ্বব্যাপী) পতাকাটি প্রয়োজনীয় ছিল, তবে অদ্ভুতভাবে যথেষ্ট, এটি এই বিশেষ ক্ষেত্রে নয়))

splitলুকে হেড ব্যবহার করে নিশ্চিত হয় যে মিলিত মূলধনী চিঠিটি সেবন করা হয় না এবং যদি আপারকামেলকেস আপনার সাথে ডিল করার প্রয়োজন হয় তবে একটি শীর্ষস্থানীয় স্থানের সাথে কাজ করা এড়ানো উচিত। প্রত্যেকের প্রথম অক্ষরকে মূলধন করতে আপনি ব্যবহার করতে পারেন:

function splitCamelCaseToString(s) {
    return s.split(/(?=[A-Z])/).map(function(p) {
        return p.charAt(0).toUpperCase() + p.slice(1);
    }).join(' ');
}

mapঅ্যারে পদ্ধতি একটি ES5 বৈশিষ্ট্য, কিন্তু আপনি এখনও সাথে পুরোনো ব্রাউজারের মধ্যে এটি ব্যবহার করতে পারেন এমডিসি থেকে কিছু কোড । বিকল্পভাবে, আপনি একটি forলুপ ব্যবহার করে অ্যারের উপাদানগুলির মাধ্যমে পুনরাবৃত্তি করতে পারেন ।


প্রথম ফাংশন এটিকে বিভক্ত করে, তবে প্রথম শব্দটি প্যাসকেল করে না। দ্বিতীয় ফাংশন কোনওটিই উট কেসড মামলায় ব্যর্থ হয়। (যেমন: 'আইডি')
ডেমেন্টিক

16

আমি মনে করি এটি একটানা বড় বড় অক্ষরের পাশাপাশি সাধারণ উটকেস পরিচালনা করতে সক্ষম হওয়া উচিত।

উদাহরণস্বরূপ: কিছু পরিবর্তনশীল => কিছু পরিবর্তনশীল, তবে এবিসিসি কোড! = এবিসি কোড।

নীচের রেজেক্স আপনার উদাহরণে কাজ করে তবে ক্যামসেলকেসে সংক্ষেপণ উপস্থাপনের সাধারণ উদাহরণও।

"somethingLikeThis"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "something Like This"

"someVariableWithABCCode"
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    .replace(/([A-Z])([a-z])/g, ' $1$2')
    .replace(/\ +/g, ' ') => "some Variable With ABC Code"

আপনি প্রথম চরিত্রটি মূলধন হিসাবে উপরে হিসাবে সামঞ্জস্য করতে পারে।


10
function spacecamel(s){
    return s.replace(/([a-z])([A-Z])/g, '$1 $2');
}

spacecamel ( 'somethingLikeThis')

// ফেরত মান: এর মতো কিছু


1
সুন্দর! এটি হ'ল আমার প্রয়োজন ঠিক যেমনটি আমি বিভক্ত করতে চেয়েছিলাম যেমন: ডিসকভারি চ্যানেল এবং এইচবিও অন্যান্য উত্তরগুলি আমাকে ডিসকভারি চ্যানেল এবং এইচবিও দিয়েছিল, তবে এইচবিও অক্ষত থাকায় আপনার উত্তরটি আমার পক্ষে কৌশলটি করেছে কারণ আপনাকে ধন্যবাদ!
এজেএস


4

একটি সমাধান যা সংখ্যাগুলি পরিচালনা করে:

function capSplit(str){
   return str.replace
      ( /(^[a-z]+)|[0-9]+|[A-Z][a-z]+|[A-Z]+(?=[A-Z][a-z]|[0-9])/g
      , function(match, first){
          if (first) match = match[0].toUpperCase() + match.substr(1);
          return match + ' ';
          }
       )
   }

এখানে পরীক্ষিত [জেএসফিডাল, কোনও লাইব্রেরি নেই। আইই চেষ্টা করা হয়নি]; বেশ স্থিতিশীল হওয়া উচিত।


0

আপনি যদি পুরানো ব্রাউজারগুলির বিষয়ে চিন্তা না করেন (বা তাদের জন্য ফ্যালব্যাক হ্রাস ফাংশনটি ব্যবহার করে কিছু মনে করেন না) তবে এটি 'xMLHTTPRequest' এর মতো স্ট্রিংগুলিকেও বিভক্ত করতে পারে (তবে অবশ্যই 'এক্সএমএলএইচটিপিআরকিউয়েস্ট' পছন্দ করতে পারে না)।

function splitCamelCase(str) {
        return str.split(/(?=[A-Z])/)
                  .reduce(function(p, c, i) {
                    if (c.length === 1) {
                        if (i === 0) {
                            p.push(c);
                        } else {
                            var last = p.pop(), ending = last.slice(-1);
                            if (ending === ending.toLowerCase()) {
                                p.push(last);
                                p.push(c);
                            } else {
                                p.push(last + c);
                            }
                        }
                    } else {
                        p.push(c.charAt(0).toUpperCase() + c.slice(1));
                    }
                    return p;
                  }, [])
                  .join(' ');
}

0

আমার সংস্করণ

function camelToSpace (txt) {
  return txt
    .replace(/([^A-Z]*)([A-Z]*)([A-Z])([^A-Z]*)/g, '$1 $2 $3$4')
    .replace(/ +/g, ' ')
}
camelToSpace("camelToSpaceWithTLAStuff") //=> "camel To Space With TLA Stuff"

আমি এই ফাংশনটি 3000 লাইনে লুপটিতে প্রয়োগ করেছি এবং মূলধন দিয়ে শুরু হওয়া প্রতিটি লাইনের সামনে সেই স্পেসগুলি পেয়েছি
ডোমিনিক ডোমনস্কি

0

এই সমাধানটি এখানে চেষ্টা করে দেখুন -

var value = "myCamelCaseText";
var newStr = '';
for (var i = 0; i < value.length; i++) {
  if (value.charAt(i) === value.charAt(i).toUpperCase()) {
    newStr = newStr + ' ' + value.charAt(i)
  } else {
    (i == 0) ? (newStr += value.charAt(i).toUpperCase()) : (newStr += value.charAt(i));
  }
}
return newStr;

-5

রিজেক্স নয়, তবে এর মতো সহজ এবং পুরানো কৌশলগুলি জানার জন্য দরকারী:

var origString = "thisString";
var newString = origString.charAt(0).toUpperCase() + origString.substring(1);

5
না, প্রশ্নটি "এই স্ট্রিং" থেকে "এই স্ট্রিং" (একটি স্থান সহ) "এই স্ট্রিং" নয়
পিট

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