Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การแปลงสตริงเป็น Snake Case ใน JavaScript

ภาพรวม

Snake Case คือรูปแบบการเขียนสตริงโดยแทนที่ช่องว่างด้วย underscore (_) และทำให้ตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็ก (Lowercase) เช่น 'This is a test' -> 'this_is_a_test'

การนำไปใช้

const toSnakeCase = (str = '') => {
  return str.split(' ')
    .map(word => word.toLowerCase())
    .join('_');
};

console.log(toSnakeCase('This is a simple sentence')); 
// this_is_a_simple_sentence

ผลลัพธ์

this_is_a_simple_sentence

วิธีการทันสมัยและครอบคลุมมากกว่า

// รองรับ PascalCase, camelCase, kebab-case, spaces ทั้งหมด
const toSnakeCaseRobust = (str) => 
  str
    // แทนที่ตัวใหญ่ที่ตามมาหลังตัวเล็ก ด้วย _ + ตัวเล็ก
    .replace(/([a-z])([A-Z])/g, '$1_$2')
    // แทนที่ Space, Hyphen, Dot ด้วย _
    .replace(/[\s\-\.]+/g, '_')
    // ตัด _ นำหน้า/ท้าย
    .replace(/^_+|_+$/g, '')
    .toLowerCase();

// ทดสอบ
console.log(toSnakeCaseRobust('ThisIsATest'));        // this_is_a_test
console.log(toSnakeCaseRobust('this-is-a-test'));     // this_is_a_test
console.log(toSnakeCaseRobust('This Is A Test'));     // this_is_a_test
console.log(toSnakeCaseRobust('this.is.a.test'));     // this_is_a_test
console.log(toSnakeCaseRobust('  This   Is  Test  ')); // this_is_test

รูปแบบ Naming Conventions เปรียบเทียบ

StyleExampleUse Case
snake_caseuser_namePython, Ruby, SQL, CSS
camelCaseuserNameJavaScript, Java, TypeScript
PascalCaseUserNameClass Names, Components
kebab-caseuser-nameURLs, CSS Classes, HTML IDs
SCREAMING_SNAKEUSER_NAMEConstants, Env Variables

ฟังก์ชันแปลงรูปแบบครบชุด

const changeCase = {
  snake: (s) => s.replace(/([a-z])([A-Z])/g, '$1_$2').replace(/[\s\-\.]+/g, '_').toLowerCase(),
  camel: (s) => s.replace(/([-_ ])([a-z])/g, (_, __, c) => c.toUpperCase()).replace(/^[A-Z]/, c => c.toLowerCase()),
  pascal: (s) => s.replace(/([-_ ])([a-z])/g, (_, __, c) => c.toUpperCase()).replace(/^[a-z]/, c => c.toUpperCase()),
  kebab: (s) => s.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/[\s_\.]+/g, '-').toLowerCase(),
  constant: (s) => s.replace(/([a-z])([A-Z])/g, '$1_$2').replace(/[\s\-\.]+/g, '_').toUpperCase(),
};

การประยุกต์ใช้

  • Code Generation: สร้าง Variable Names อัตโนมัติ
  • Database: แปลง Column Names ระหว่าง Convention
  • API: แปลง Request/Response Keys
  • File Naming: Normalize Filenames