Tôi có một số từ như "màu tím sáng" và "màu đỏ sẫm" được lưu trữ dưới dạng "lightpurple" và "darkred". Làm cách nào để kiểm tra các chữ cái viết hoa trong từ như "lightpurple" và đặt một khoảng trống vào giữa các từ "ánh sáng" và "tím" để tạo thành từ "màu tím sáng".
Xin được cảm ơn trước về sự giúp đỡ
Ilia g
9,9132 Huy hiệu vàng38 Huy hiệu bạc58 Huy hiệu Đồng2 gold badges38 silver badges58 bronze badges
Đã hỏi ngày 11 tháng 3 năm 2013 lúc 16:03Mar 11, 2013 at 16:03
3
Bạn có thể sử dụng Regex để thêm một khoảng trống ở bất cứ nơi nào có chữ thường bên cạnh chữ hoa.
Một cái gì đó như thế này:
"LightPurple".replace[/[[a-z]][[A-Z]]/, '$1 $2']
Cập nhật: Nếu bạn có nhiều hơn 2 từ, thì bạn sẽ cần sử dụng cờ g
, để phù hợp với tất cả.: If you have more than 2 words, then you'll need to use the g
flag, to match them all.
"LightPurpleCar".replace[/[[a-z]][[A-Z]]/g, '$1 $2']
CẬP NHẬT 2: Nếu đang cố gắng chia các từ như CSVFile
, thì bạn có thể cần phải sử dụng Regex này thay thế:: If are trying to split words like CSVFile
, then you might need to use this regex instead:
"CSVFilesAreCool".replace[/[[a-zA-Z]][[A-Z]][[a-z]]/g, '$1 $2$3']
Đã trả lời ngày 11 tháng 3 năm 2013 lúc 16:36Mar 11, 2013 at 16:36
gen_Ericgen_Ericgen_Eric
Phim thương hiệu vàng 218K4040 gold badges296 silver badges334 bronze badges
12
Được rồi, chia sẻ kinh nghiệm của tôi. Tôi có triển khai này trong một số ngôn ngữ khác, nó hoạt động tuyệt vời. Đối với bạn, tôi vừa tạo một phiên bản JavaScript với một ví dụ để bạn thử điều này:
var camelCase = "LightPurple";
var tmp = camelCase[0];
for [i = 1; i < camelCase.length; i++]
{
var hasNextCap = false;
var hasPrevCap = false;
var charValue = camelCase.charCodeAt[i];
if [charValue > 64 && charValue < 91]
{
if [camelCase.length > i + 1]
{
var next_charValue = camelCase.charCodeAt[i + 1];
if [next_charValue > 64 && next_charValue < 91]
hasNextCap = true;
}
if [i - 1 > -1]
{
var prev_charValue = camelCase.charCodeAt[i - 1];
if [prev_charValue > 64 && prev_charValue < 91]
hasPrevCap = true;
}
if [i < camelCase.length-1 &&
[![hasNextCap && hasPrevCap || hasPrevCap]
|| [hasPrevCap && !hasNextCap]]]
tmp += " ";
}
tmp += camelCase[i];
}
Đây là bản demo.
Oscar Mederos
28.4K21 Huy hiệu vàng81 Huy hiệu bạc123 Huy hiệu đồng21 gold badges81 silver badges123 bronze badges
Đã trả lời ngày 11 tháng 3 năm 2013 lúc 16:52Mar 11, 2013 at 16:52
KMXKMXKMX
2.5911 Huy hiệu vàng22 Huy hiệu bạc27 Huy hiệu đồng1 gold badge22 silver badges27 bronze badges
Bạn có thể so sánh từng ký tự với một chuỗi các chữ cái chữ hoa.
function splitAtUpperCase[input]{
var uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//start at 1 because 0 is always uppercase
for [var i=1; i {
if [char === char.toUpperCase[] && index > 0] {
return ` ${char}`;
}
return char;
};
function formatString[string] {
return string
.split['']
.map[createSpacesBetweenWords]
.join[''];
}
formatString['LightPurple']; //returns a new string where words are separated by spaces
Đã trả lời ngày 9 tháng 3 năm 2021 lúc 16:37Mar 9, 2021 at 16:37