Tôi không thể làm cho giải pháp của aix hoạt động (và nó cũng không hoạt động trên RegExr), vì vậy tôi đã đưa ra giải pháp của riêng mình mà tôi đã thử nghiệm và dường như làm chính xác những gì bạn đang tìm kiếm:
((^[a-z]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($))))
và đây là một ví dụ về việc sử dụng nó:
; Regex Breakdown: This will match against each word in Camel and Pascal case strings, while properly handling acrynoms.
; (^[a-z]+) Match against any lower-case letters at the start of the string.
; ([A-Z]{1}[a-z]+) Match against Title case words (one upper case followed by lower case letters).
; ([A-Z]+(?=([A-Z][a-z])|($))) Match against multiple consecutive upper-case letters, leaving the last upper case letter out the match if it is followed by lower case letters, and including it if it's followed by the end of the string.
newString := RegExReplace(oldCamelOrPascalString, "((^[a-z]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($))))", "$1 ")
newString := Trim(newString)
Ở đây tôi đang phân tách từng từ bằng dấu cách, vì vậy đây là một số ví dụ về cách chuỗi được chuyển đổi:
- ThisIsATitleCASEString => Đây là chuỗi trường hợp tiêu đề
- andThisOneIsCamelCASE => và This One Is Camel CASE
Giải pháp ở trên thực hiện những gì bài đăng gốc yêu cầu, nhưng tôi cũng cần một regex để tìm các chuỗi lạc đà và pascal bao gồm các số, vì vậy tôi cũng đã đưa ra biến thể này để bao gồm các số:
((^[a-z]+)|([0-9]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($)|([0-9]))))
và một ví dụ về việc sử dụng nó:
; Regex Breakdown: This will match against each word in Camel and Pascal case strings, while properly handling acrynoms and including numbers.
; (^[a-z]+) Match against any lower-case letters at the start of the command.
; ([0-9]+) Match against one or more consecutive numbers (anywhere in the string, including at the start).
; ([A-Z]{1}[a-z]+) Match against Title case words (one upper case followed by lower case letters).
; ([A-Z]+(?=([A-Z][a-z])|($)|([0-9]))) Match against multiple consecutive upper-case letters, leaving the last upper case letter out the match if it is followed by lower case letters, and including it if it's followed by the end of the string or a number.
newString := RegExReplace(oldCamelOrPascalString, "((^[a-z]+)|([0-9]+)|([A-Z]{1}[a-z]+)|([A-Z]+(?=([A-Z][a-z])|($)|([0-9]))))", "$1 ")
newString := Trim(newString)
Và đây là một số ví dụ về cách một chuỗi với các số được chuyển đổi với regex này:
- myVariable123 => Biến 123 của tôi
- my2Variables => 2 biến của tôi
- The3rdVariableIsHere => The 3 rdVariable is Here
- 12345NumsAtTheStartIncludedToo => 12345 Nums lúc bắt đầu cũng được bao gồm
^
và một trường hợp có điều kiện khác cho các chữ cái viết hoa ở dạng phủ định. Chưa được kiểm tra chắc chắn, nhưng tôi nghĩ đó là cách tốt nhất để bạn khắc phục sự cố.