Mình muốn viết regex lọc ra những chỗ in đậm của các dòng sau đây:
/
**/**login
**/**profile
**/en/**abc
**/de/**xyz
/vi
/en
/de
Mình mới viết được tới /(\w{2}/)? nhưng chưa biết cách để chọn dòng /vi và /en. Các bác giúp mình với, mình dùng trang http://rubular.com/ để thử.
Regex lọc ra phần đầu của path trong JavaScript
Sao in đậm không được vậy ta
Muốn thế này phải không?
^\/(([a-z]{2})([\-_][a-zA-Z]{2})?)(\/\w*)?$
Kiểm thử:
Nhóm khớp:
Match 1
1. en
2. en
3.
4. /abc
Match 2
1. de
2. de
3.
4. /xyz
Match 3
1. vi_VN
2. vi
3. _VN
4.
Match 4
1. vi_VN
2. vi
3. _VN
4. /logout
Match 5
1. vi
2. vi
3.
4.
Match 6
1. en
2. en
3.
4.
Match 7
1. de
2. de
3.
4.
Match 8
1. en-US
2. en
3. -US
4.
Match 9
1. vi-VN
2. vi
3. -VN
4. /profile
- Chỉ có 2 dòng đầu không khớp. Vì không có mã ngôn ngữ.
- Cách viết mã ngôn ngữ và mã quốc gia cách nhau bằng - hoặc _ nên mình viết cho cả 2 trường hợp
- Theo kết quả các nhóm thì có thể lấy nhóm:
- Mã ngôn ngữ và mã quốc gia.
- Chỉ mã ngôn ngữ.
- Chỉ mã quốc gia (nếu có).
- Đường dẫn nối tiếp.
1 Like
/login và /profile đều match dấu / nữa bạn ơi
Mình cũng không cần lấy nhóm, mình chỉ cần match để xóa đoạn đầu đi thôi
Vậy làm hiểu lầm rồi
^\/[a-z]{2}([\-_][A-Z]{2})?$|\/([a-z]{2}([\-_][A-Z]{2})?\/)?
Kết quả:
Thay vì kiếm nó xóa để lấy đoạn sau, sao không dùng regex lấy luôn đoạn sau có phải tiện hơn không?
5 Likes
Bác nói đúng. Thay vì dùng replace để xóa thì match thẳng đoạn sau nó nhanh hơn
Cái link web mình nó chỉ bắt đầu bằng 2 kí tự thôi vd như /en/abc hoặc /en chứ ko có phần -VN nhưng cách tổng quát của bác rất hay. Thank bác ^^