Tôi có một chuỗi "MySites"
. Tôi muốn đặt một khoảng trống giữa My
và Sites
.
Làm cách nào để thực hiện việc này trong jQuery hoặc JavaScript?
Tôi có một chuỗi "MySites"
. Tôi muốn đặt một khoảng trống giữa My
và Sites
.
Làm cách nào để thực hiện việc này trong jQuery hoặc JavaScript?
Câu trả lời:
Bạn chỉ có thể thêm một khoảng trắng trước mỗi ký tự viết hoa và cắt bỏ khoảng trắng ở đầu và cuối
s = s.replace(/([A-Z])/g, ' $1').trim()
/([A-Z]+)/g
. Dấu + sẽ đảm bảo bạn khớp càng nhiều chữ viết hoa liên tiếp càng tốt.
Điều này sẽ tìm thấy mỗi lần xuất hiện của một ký tự viết thường theo sau là một ký tự viết hoa và chèn một khoảng cách giữa chúng:
s = s.replace(/([a-z])([A-Z])/g, '$1 $2');
Đối với các trường hợp đặc biệt khi xuất hiện 2 chữ cái in hoa liên tiếp (Ví dụ: ThisIsATest), hãy thêm mã bổ sung bên dưới:
s = s.replace(/([A-Z])([A-Z])/g, '$1 $2');
"RunThisSQLQuery"
.
Tôi có thể đề xuất một chỉnh sửa nhỏ cho câu trả lời hiện được chấp nhận:
function insertSpaces(string) {
string = string.replace(/([a-z])([A-Z])/g, '$1 $2');
string = string.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
return string;
}
Điều này có nghĩa rằng:
ACROText -> ACRO Text
UserNameTest -> User Name Test
Điều này có thể hữu ích hơn một chút nếu bạn đang xử lý tên cột db (Và đang sử dụng từ viết tắt cho một số thứ)
Điều này sẽ chèn một khoảng cách giữa mỗi chữ cái viết hoa mà không được viết hoa trước.
var myString = "MySites"
var newString = "";
var wasUpper = false;
for (var i = 0; i < myString.length; i++)
{
if (!wasUpper && myString[i] == myString.toUpperCase()[i])
{
newString = newString + " ";
wasUpper = true;
}
else
{
wasUpper = false;
}
newString = newString + myString[i];
}
newString
sẽ có giá trị bạn muốn. Ngoài ra, nếu bạn muốn rút ngắn mã của mình bằng cách sử dụng regex, bạn có thể sử dụng mã sau từ Javascript camelCase thành Biểu mẫu thông thường
"thisStringIsGood"
// insert a space before all caps
.replace(/([A-Z])/g, ' $1')
// uppercase the first character
.replace(/^./, function(str){ return str.toUpperCase(); })
regex để tìm chữ thường - ranh giới chữ hoa rồi chèn một khoảng trắng
<div id='x'>ThisIsMySites</div>
$('#x').text( $('#x').text().replace(/([a-z])([A-Z])/g, "$1 $2") );
Đây là những gì tôi đã sử dụng để chuyển đổi một chuỗi thành một trường hợp tiêu đề, dựa trên một số câu trả lời ở đây:
str = str
.replace(/(_|-)/g, ' ')
.trim()
.replace(/\w\S*/g, function(str) {
return str.charAt(0).toUpperCase() + str.substr(1)
})
.replace(/([a-z])([A-Z])/g, '$1 $2')
.replace(/([A-Z])([A-Z][a-z])/g, '$1 $2')
Đây là JSFiddle nơi bạn có thể kiểm tra chuỗi của mình để xem liệu điều này có đáp ứng nhu cầu của bạn hay không: https://jsfiddle.net/thomastasa/5236dv8t/85/
Ví dụ:
Bạn có thể sử dụng String#split()
và xem trước bảng chữ cái viết hoa ( [A-Z]
) và sau đó Array#join()
là mảng có khoảng trắng:
let stringCamelCase = "MySites";
let string = stringCamelCase.split(/(?=[A-Z])/).join(" ");
console.log(string)
Hoặc, dưới dạng một hàm Đối tượng chuỗi:
String.prototype.cC2SC = function() {
return this.split(/(?=[A-Z])/).join(" ");
}
console.log("MyCamelCase".cC2SC());
Trong một lần thay thế regex (không có dấu cắt hoặc nối) cho phép bất kỳ ký tự nào không chỉ chữ cái [a-z]
hoặc [A-Z]
.
const str = "MySites";
str.replace(/(?<!^)([A-Z])/, " $1"); // -> "My Sites"
Bạn có thể kiểm tra thêm về giao diện phía sau (?<!^)
tại đây .