বড় হাতের অক্ষরের আগে স্থান সন্নিবেশ করান


99

আমি একটি স্ট্রিং আছে "MySites"। আমি Myএবং এর মাঝে একটা জায়গা রাখতে চাই Sites

আমি কীভাবে jQuery বা জাভাস্ক্রিপ্টে এটি করতে পারি?


4
আপনি আরও কিছু বিস্তারিত সরবরাহ করতে পারেন? আপনি পৃথক করতে চান তার স্ট্রিংগুলির সাধারণ ফর্মটি কী? যদি এটি কেবলমাত্র একটি স্ট্রিং হয় তবে কেন কেবল স্থানটিতে ম্যানুয়ালি রাখবেন না?
পয়েন্টি

4
দয়া করে আরও সুনির্দিষ্ট হন, আপনি যা জিজ্ঞাসা করছেন তা কেউ বুঝতে পারে বলে আমি মনে করি না
ক্লিমেন্ট হেরেম্যান

4
এটি যে প্যাটার্নটি মিলবে তার সংজ্ঞা দিন, উদাহরণস্বরূপ "যখন স্ট্রিংটিতে 'আমার' খুঁজে পাওয়া যায় এমন একটি স্থান" বা "প্রতিটি
মূলধর্মী

"মাইসাইটগুলির মধ্যে"। আপনি কীভাবে 1 জিনিসের মধ্যে একটি স্থান রাখতে পারেন? আমি ধরে নিয়েছি আপনি আউটপুট হিসাবে "আমার সাইট" চান।
রকেট হাজমত

# মগর - দুর্দান্ত মন্তব্য (কটাক্ষ) আপনি কি কখনও শেখানো হয়নি যে আপনার যদি বলার মতো সুন্দর কিছু না থাকে তবে কিছু বলবেন না?
ক্যারলিনচিন

উত্তর:


175

আপনি প্রতিটি বড় হাতের অক্ষরের আগে কেবল একটি স্থান যুক্ত করতে পারেন এবং শীর্ষস্থানীয় এবং পিছনের স্থানগুলি ছাঁটাই করতে পারেন

s = s.replace(/([A-Z])/g, ' $1').trim()

এটি "1AndAbove" এর জন্যও কাজ করে। অন্য সমাধান না। ধন্যবাদ !!
ওয়ান-ওয়ান

4
এটি সংক্ষেপিত শব্দগুলির জন্য "ব্যর্থ" হয়, যখন 2 বা ততোধিক টানা ক্যাপগুলি দেওয়া হয় তখন আমরা কীভাবে এটির জন্য বাধা দিতে পারি?
টনি মিশেল কাওবেট

4
সহজ @ToniMichelCaubet, ভালো Regex সংশোধন: /([A-Z]+)/g। + এটি নিশ্চিত করবে যে আপনি যথাসম্ভব একটানা একাধিক মূলধন অক্ষর মিলেছেন।
iFreilicht

এই কোডটিতে '[AZ]' ঘিরে আপনি যে বন্ধনী ব্যবহার করছেন তা কেন প্রয়োজনীয়?
ক্রিস্টিনা ব্রেসেলার 6

4
@ ক্রিস্টিনা প্যারেন্থিসিস বলেছেন 'আমি একটি পরিবর্তনশীল'। প্রথম বন্ধনী ব্যতীত, এটি 'মাইসাইটস' এর জন্য '$ 1y $ 1ite' উত্তর দেয়
ব্যবহারকারী 2051552

128

এটি একটি ছোট ছোট অক্ষরের প্রতিটি উপস্থিতি এবং তারপরে একটি বড় হাতের অক্ষর অনুসরণ করবে এবং তাদের মধ্যে একটি স্থান সন্নিবেশ করবে:

s = s.replace(/([a-z])([A-Z])/g, '$1 $2');

বিশেষ ক্ষেত্রে যখন পরপর ২ টি বড় বড় অক্ষর আসে (উদাহরণস্বরূপ: এটিআইএসএটিস্ট) নীচে অতিরিক্ত কোড যুক্ত করে:

 s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');

4
কেবলমাত্র একটি সতর্কতা, এটি "এটিআইএসএস্টেস্ট" এর একক অক্ষরের জন্য ব্যর্থ হবে যার ফলস্বরূপ "এটি ইজ অ্যাটেষ্ট" থাকবে।
সেরেস

4
@ সেরেস: ভালো কথা। যে ক্ষেত্রে পরিবর্তে কোন রাজধানী যে প্রথম অক্ষর নয় আগে একটি স্থান ঢোকাতে দ্বারা পরিচালিত হতে পারে, কিন্তু আপনি এখনও মামলা যে শব্দ শনাক্তকরণ ছাড়া পরিচালনা করা যাবে না মত আছে "RunThisSQLQuery"
গুফা 14

4
"এইআইএসএস্টেস্ট" - এর জন্য ('রানটাইজ এসকিউএলকিউয়ারি' গণনা করা হয়নি) আপনি এটি করতে পারেন: স্ট্রিংরেসপ্লেস (/ ([এজেড]) / জি, '$ 1')। ট্রিম ()
ক্যারিন্লাইচিন

উজ্জ্বল! ধন্যবাদ!
অমি

24

আমি বর্তমানে গৃহীত উত্তরে সামান্য সম্পাদনার পরামর্শ দিতে পারি:

function insertSpaces(string) {
    string = string.replace(/([a-z])([A-Z])/g, '$1 $2');
    string = string.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
    return string;
}

এই যে মানে:

ACROText -> ACRO Text
UserNameTest -> User Name Test

আপনি ডিবি কলামের নাম নিয়ে কাজ করে যা কিছুটা বেশি কার্যকর হতে পারে (এবং কিছু জিনিসের জন্য সংক্ষিপ্ত শব্দ ব্যবহার করছেন)


4
এটি আমার যা প্রয়োজন ছিল তার জন্য পুরোপুরি কাজ করে। এটি পুরোপুরি মূল অক্ষরের মধ্যে একটি স্থান জুড়েছে তবে সংক্ষেপে একসাথে রাখে।
শক্তিশালী_মাইট

6

এটি প্রতিটি বড় বড় অক্ষরের মাঝে একটি স্থান সন্নিবেশ করানো উচিত যা পূর্বে কোনও বড় অক্ষরের আগে ছিল না।

var myString = "MySites"
var newString = "";
var wasUpper = false;
for (var i = 0; i < myString.length; i++)
{
    if (!wasUpper && myString[i] == myString.toUpperCase()[i])
    {
        newString = newString + " ";
        wasUpper = true;
    }
    else
    {
        wasUpper = false;
    }
    newString = newString + myString[i];
}

newStringআপনি চান মান আছে। এছাড়াও, আপনি যদি রেগেক্স ব্যবহার করে আপনার কোডটি ছোট করতে চান তবে জাভাস্ক্রিপ্ট উটকেস থেকে নিয়মিত ফর্ম পর্যন্ত নীচের কোডটি ব্যবহার করতে পারেন

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


3

এখানে কয়েকটি উত্তরের ভিত্তিতে একটি স্ট্রিংকে একটি শিরোনামের ক্ষেত্রে রূপান্তর করতে আমি এখানেই শেষ করেছি:

str = str
  .replace(/(_|-)/g, ' ')
  .trim()
  .replace(/\w\S*/g, function(str) {
    return str.charAt(0).toUpperCase() + str.substr(1)
  })   
  .replace(/([a-z])([A-Z])/g, '$1 $2')
  .replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')   

এখানে একটি জেএসফিডেল রয়েছে যেখানে আপনি আপনার স্ট্রিংটি এটি আপনার প্রয়োজনগুলি পূরণ করে কিনা তা পরীক্ষা করতে পারেন: https://jsfiddle.net/thomastasa/5236dv8t/85/


উদাহরণ:

  • "আপনার স্ট্রিংহিরে" -> "আপনার স্ট্রিং এখানে"
  • "অন্য স্ট্রিংহির" -> "এখানে আর একটি স্ট্রিং"
  • "someones_string" -> "সোনারস স্ট্রিং"
  • "অন্য-স্ট্রিং-এখানে" -> "এখানে অন্য একটি স্ট্রিং"
  • "myAWESOMEString" -> "আমার দুর্দান্ত স্ট্রিং"

1

আপনি String#split()মূলধনী বর্ণমালা ( [A-Z]) এবং তারপরে Array#join()একটি স্থান সহ অ্যারের জন্য ব্যবহার করতে পারেন এবং এগিয়ে যেতে পারেন :

let stringCamelCase = "MySites";

let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");

console.log(string)

অথবা, স্ট্রিং অবজেক্ট ফাংশন হিসাবে:

String.prototype.cC2SC = function() {
  return this.split(/(?=[A-Z])/).join(" ");
}

console.log("MyCamelCase".cC2SC());


1

একটি একক রেজেক্সে প্রতিস্থাপন করুন (ছাঁটাই বা যোগদান ছাড়া) যা কোনও অক্ষরকে কেবল অক্ষর [a-z]বা না হিসাবে অনুমতি দেয় [A-Z]

const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"

আপনি (?<!^) এখানে পিছনে চেহারা সম্পর্কে আরও চেক করতে পারেন ।

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