2012-03-12 22 views
15

Làm cách nào để chuyển đổi tên có dấu gạch dưới vào tên trường hợp lạc đà như sau bằng cách sử dụng số tìm kiếm biểu thức chính quy Java/Perl và thay thế?Làm cách nào để chuyển đổi từ dấu gạch dưới sang trường hợp lạc đà bằng regex?

underscore_variable_name -> underscoreVariableName 
UNDERSCORE_VARIABLE_NAME -> underscoreVariableName 
_LEADING_UNDERSCORE -> leadingUnderscore 

Lý do tôi yêu cầu một cụm từ thông dụng là tôi muốn thực hiện việc này bằng cách sử dụng Eclipse hoặc Notepad ++ tìm kiếm và thay thế.

Trả lời

20

Some Perl examples:

my $str = 'variable_name, VARIABLE_NAME, _var_x_short, __variable__name___'; 

### solution 1 
$_ = $str; 

$_ = lc; 
s/_(\w)/\U$1/g; 

say; 

### solution 2: multi/leading underscore fix 
$_ = $str; 

$_ = lc; 
s/(?<=[^\W_])_+([^\W_])|_+/\U$1/g; 

say; 

### solution 3: without prior lc 
$_ = $str; 

s/(?<=[^\W_])_+([^\W_])|([^\W_]+)|_+/\U$1\L$2/g; 

say; 

Output:

variableName, variableName, VarXShort, _variable_name__ 
variableName, variableName, varXShort, variableName 
variableName, variableName, varXShort, variableName 
+0

+1: Neat. Về chỉ có thể phân giải là '_tea_break' sẽ trở thành' TeaBreak' thay vì 'teaBreak' hoặc' _teaBreak'. Nhưng điều đó sẽ phục vụ ai đó đúng cho việc sử dụng tên bắt đầu bằng dấu gạch dưới. –

+0

@JonathanLeffler, bạn nói đúng, và cũng sẽ có vấn đề nếu sử dụng nhiều dấu gạch dưới liên tiếp. Đã cập nhật câu trả lời để khắc phục điều đó. – Qtax

+1

Cảm ơn, nhưng vì điều này là để sử dụng trong tìm kiếm của trình soạn thảo và thay thế các hộp thoại tôi đã yêu cầu thực hiện việc này bằng một regex đơn. '$ _ = lc' phá vỡ ràng buộc này. Bạn có thể nghĩ ra một cách để kết hợp chúng? –

2

Nếu bạn đã có biến camelCase trong chuỗi, sau đó @ câu trả lời Qtax sẽ làm cho họ chữ thường. Nếu tất cả các biến của bạn là thấp hơn trường hợp under_scored sau đó bạn có thể làm cho việc sửa đổi sau đây để # 3: W ->A-Z

's/(?<=[^\A-Z_])_+([^\A-Z_])|([^\A-Z_]+)|_+/\U$1\L$2/g' 
1

Uppercases chữ sau _-:

s/[_-]([a-z])/\u$1/gr 
Các vấn đề liên quan