Sử dụng regex để replace hiệu quả hơn
TIL
720
regex
15
White

minhphong306 viết ngày 06/10/2018

Tình cờ có 1 task động tới thay thế bằng regex, thấy hay ho xịn xò nên em note lại vài dòng. Hi vọng sẽ có ích cho các bác

TL;DR

Sử dụng regex để capture lại giá trị tìm kiếm được trong các group và sử dụng lại giá trị capture này trong việc thay thế.
VD:
Regex tìm kiếm:

(\d+)Z

=> Tìm kiếm các giá trị là số, theo sau bởi chữ Z. Lưu giá trị số vào trong group 1 (cặp ngoặc tròn thứ 1 là group 1, thứ 2 là group 2,...)
Regex thay thế sử dụng lại giá trị capture được trong group regex (\d+)

$1.000Z

$1, $2,... $n là các giá trị capture được trong các group.

Ví dụ cụ thể

Tớ có chuỗi date time như sau:

"2018-08-05T03:39:11Z"
"2018-08-05T03:38:25Z"
"2018-08-05T03:37:13Z"
"2018-08-05T03:36:44Z"

Tớ muốn chuyển các chuỗi trên thành

ISODate("2018-08-05T03:39:11.000Z")
ISODate("2018-08-05T03:38:25.000Z")
ISODate("2018-08-05T03:37:13.000Z")
ISODate("2018-08-05T03:36:44.000Z")

Tức là

  • Thêm ISODate(" vào đầu mỗi chuỗi
  • Sau kí tự giây, thêm .000 vào và đóng ngoặc )

Thực hiện

Yêu cầu đầu tiên khá dễ dàng. Chỉ cần replace thông thường:

replace("\"2018", "ISODate(\"2018")

Ta sẽ thu được

ISODate("2018-08-05T03:39:11Z"
ISODate("2018-08-05T03:38:25Z"
ISODate("2018-08-05T03:37:13Z"
ISODate("2018-08-05T03:36:44Z"

Với yêu cầu tiếp theo, ta cần

  • Lấy ra giá trị giây hiện tại (1), kí tự Z và kí tự " (VD: 11Z", 25Z", 13Z", 44Z")
  • Thay thế cụm trên bằng (1) .000 Z ") (VD: 11Z" => 11.000Z"))

Vì các giá trị giây là khác nhau, nên ta không thể thay thế chính xác như yêu cầu đầu tiên được. Ta cần capture lại giá trị số của giây, thay thế cụm giâyZ" thành giây.000Z"). Sử dụng regex

replace("(\d+)Z\"", "$1.000Z\"_")

Kết quả thu được

ISODate("2018-08-05T03:39:11.000Z")
ISODate("2018-08-05T03:38:25.000Z")
ISODate("2018-08-05T03:37:13.000Z")
ISODate("2018-08-05T03:36:44.000Z")

Nguồn bài viết từ blog của mình: https://minhphong306.wordpress.com/2018/10/05/trick-su-dung-regex-capture-lai-gia-tri-de-replace/

minhphong306 06-10-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

minhphong306

3 bài viết.
6 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
18 2
Tham gia kipalog đã lâu nhưng đây là lần đầu em viết bài trên này. Có gì sai sót mong được các bác chỉ giáo :D Vừa rồi thấy ông anh trong công ty ...
minhphong306 viết 11 tháng trước
18 2
White
6 6
Thi thoảng muốn mở 1 trang đã bookmark ở tab mới thì tớ phải làm 2 thao tác: click phải chuột open in new tab. Thi thoảng click nhầm lại phải back...
minhphong306 viết 11 tháng trước
6 6
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 năm trước
0 4
White
2 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết 7 tháng trước
2 0
White
22 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết gần 3 năm trước
22 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
6 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!