Thay thế dấu cách bằng dấu gạch ngang và làm cho tất cả các chữ cái viết thường


247

Tôi cần định dạng lại một chuỗi bằng jQuery hoặc vanilla JavaScript

Hãy nói rằng chúng ta có "Sonic Free Games".

Tôi muốn chuyển đổi nó thành "sonic-free-games".

Vì vậy, khoảng trắng nên được thay thế bằng dấu gạch ngang và tất cả các chữ cái được chuyển đổi thành chữ nhỏ.

Bất kỳ trợ giúp về điều này xin vui lòng?

Câu trả lời:


549

Chỉ cần sử dụng Chuỗi replacetoLowerCasephương thức, ví dụ:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase();
console.log(str); // "sonic-free-games"

Lưu ý gcờ trên RegExp, nó sẽ thực hiện thay thế trên toàn cầu trong chuỗi, nếu nó không được sử dụng, chỉ có lần xuất hiện đầu tiên sẽ được thay thế, và cũng RegExpsẽ khớp với một hoặc nhiều ký tự khoảng trắng.


52
Một biến thể tôi đã đưa ra với việc sử dụng \ W đại diện cho bất kỳ ký tự không phải âm thanh nào. Điều này hữu ích cho một cái gì đó như 'A & P tạp hóa' mà sẽ trở thành 'tạp hóa'. str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk

1
Tâm trí không trích dẫn phần regex, nghĩa là replace(/\s+/g, ..không replace('/\s+/f', .. (không có dấu nháy đơn)
Attila Fulop

Điều gì xảy ra nếu tôi muốn xóa khoảng trắng ở đầu và cuối chuỗi?
Romel Indemne

@RomelIndemne Ngày nay, bạn có thể sử dụng String.prototype.trimphương pháp:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

Cảm ơn, một trong những tốt đẹp. Bây giờ tôi cần một cách khác xung quanh xD JK
lawph photo

34

Câu trả lời trên có thể được coi là khó hiểu một chút. Các phương thức chuỗi không sửa đổi đối tượng gốc. Họ trả lại đối tượng mới. Nó phải là:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str

10
Tôi nghĩ điều quan trọng cần lưu ý là câu trả lời được chấp nhận đã được chỉnh sửa để kết hợp khái niệm này
Dexygen

31

Bạn cũng có thể sử dụng splitjoin:

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games

Hãy chú ý đến các trường hợp phụ, ví dụ, nơi có một số không gian ở đầu, chúng sẽ không được thay thế
Bonjour123

1

Câu trả lời của @ CMS là tốt, nhưng tôi muốn lưu ý rằng bạn có thể sử dụng gói này: https://github.com/sindresorhus/slugify , nó phù hợp với bạn và bao gồm nhiều trường hợp cạnh (ví dụ: tiếng Đức, tiếng Việt, tiếng Ả Rập , Nga, Rumani, Thổ Nhĩ Kỳ, v.v.).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.