2015-05-29 21 views
26

Làm cách nào để chuyển đổi PascalCase chuỗi thành underscore_case chuỗi? Tôi cũng cần chuyển đổi dấu chấm thành dấu gạch dưới.Javascript chuyển đổi PascalCase thành underscore_case

ví dụ: chuyển đổi

TypeOfData.AlphaBeta 

vào

type_of_data_alpha_beta 
+0

Hãy thử liên kết thân này nó giúp bạn biết chắc chắn http://jamesroberts.name/blog/2010/02/22/string- chức năng-cho-javascript-trim-to-lạc đà-case-to-dashed-và-to-gạch dưới/ – Santhucool

Trả lời

46

Bạn có thể thử các bước dưới đây.

  • Chụp tất cả các chữ hoa và cũng khớp với ký tự dấu chấm tùy chọn trước đó.

  • Sau đó chuyển đổi các chữ cái viết hoa thành chữ thường và sau đó quay lại để thay thế hàm bằng _ làm ký tự trước. Điều này sẽ đạt được bằng cách sử dụng chức năng ẩn danh trong phần thay thế.

  • Điều này sẽ thay thế chữ hoa bắt đầu thành _ + lowercase_letter.

  • Cuối cùng, việc xóa dấu gạch dưới bắt đầu sẽ cho bạn kết quả mong muốn.

    var s = 'TypeOfData.AlphaBeta'; 
    console.log(s.replace(/(?:^|\.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, "")); 
    

HOẶC

var s = 'TypeOfData.AlphaBeta'; 
 
alert(s.replace(/\.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

cách nào để ngăn chặn nó khi toàn bộ một từ là chữ hoa. ví dụ. MotorRPM vào motor_rpm thay vì motor_r_p_m? hoặc BatteryAAA vào battery_aaa thay vì battery_a_a_a?

var s = 'MotorRMP'; 
 
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

+0

Cảm ơn, bất kỳ cách nào để dừng nó khi toàn bộ một từ được viết hoa. ví dụ. 'MotorRMP' vào' motor_rpm' thay vì 'motor_r_p_m'? hoặc 'BatteryAAA' vào' pin_aaa' thay vì 'battery_a_a_a'. – zahmati

+1

'alert (s.replace (/ \.? ([AZ] +)/g, hàm (x, y) {return" _ "+ y.toLowerCase()}). Thay thế (/^_ /," ")); ' –

1
function toCamelCase(s) { 
    // remove all characters that should not be in a variable name 
    // as well underscores an numbers from the beginning of the string 
    s = s.replace(/([^a-zA-Z0-9_\- ])|^[_0-9]+/g, "").trim().toLowerCase(); 

    // uppercase letters preceeded by a hyphen or a space 
    s = s.replace(/([ -]+)([a-zA-Z0-9])/g, function(a,b,c) { 
    return c.toUpperCase(); 
    }); 

    // uppercase letters following numbers 
    s = s.replace(/([0-9]+)([a-zA-Z])/g, function(a,b,c) { 
    return b + c.toUpperCase(); 
    }); 

    return s; 
} 

Hãy thử chức năng này, hy vọng nó sẽ giúp.

+3

Không đúng theo hướng? 'CamelToUnderscore' là cần thiết. – zahmati

17

Ngoài ra sử dụng lodash:

lodash.snakeCase(str); 

Ví dụ:

_.snakeCase('TypeOfData.AlphaBeta'); 
// ➜ 'type_of_data_alpha_beta' 

Lodash là một thư viện tốt để cung cấp cho phím tắt để nhiều hàng ngày js tasks.There rất nhiều chức năng chuỗi thao tác tương tự khác như camelCase, kebabCase v.v.

+1

Wow cảm ơn vì điều này, tôi đã sử dụng toSnakeCase của riêng mình, toTitleCase (_. StartCase), toCamelCase. Nhờ điều này tôi bây giờ chuyển sang lodash và nó hoạt động tốt hơn nhiều sau đó tôi! Tôi không biết lodash có cái này! – Noitidart

13
str.split(/(?=[A-Z])/).join('_').toLowerCase(); 

u're đón

var s1 = 'someTextHere'; 
 
var s2 = 'SomeTextHere'; 
 

 
var o1 = s1.split(/(?=[A-Z])/).join('_').toLowerCase(); 
 
var o2 = s2.split(/(?=[A-Z])/).join('_').toLowerCase(); 
 

 
console.log(o1); 
 
console.log(o2);

+0

Đơn giản, tôi thích nó – Ced

Các vấn đề liên quan