Regex, viết tắt của biểu thức chính quy, là một công cụ hữu ích đối với tôi khi thao tác và xác thực chuỗi trong JavaScript. Trong bài đăng này, chúng tôi sẽ sử dụng Regex để xóa mọi thứ ở giữa và bao gồm cả hai ký tự được xác định trước
Trước khi chúng tôi đi sâu vào vấn đề này, đây là một vài điều bạn cần biết về Regex
str.replace[/\n/g, " "]
4 là một hàm JavaScript tìm kiếm một chuỗi cho một giá trị đã chỉ định hoặc một biểu thức chính quy và trả về một chuỗi mới trong đó các giá trị đã chỉ định được thay thếMột
str.replace[/\n/g, " "]
5 được sử dụng thay thế để mở tìm kiếm và xuất hiện trước Regex trong câu lệnh thay thế. Ví dụ.str.replace[/\n/g, " "]
6str.replace[/\n/g, " "]
7 biểu thị sự thay thế toàn cầu, nghĩa là nó sẽ thay thế mọi phiên bản của mẫustr.replace[/\n/g, " "]
8. Các chữ cái khác mà bạn có thể thấy làstr.replace[/\n/g, " "]
9 cho từ không nhạy cảm," Hello, World. /* Goodbye, World. */ Hello again, World. "
0 cho nhiều dòng và" Hello, World. /* Goodbye, World. */ Hello again, World. "
1 cho một dòng để đặt tên cho một số. Đối với bài đăng này, chúng tôi sẽ chỉ quan tâm đếnstr.replace[/\n/g, " "]
7
Tôi sẽ đến với các nhân vật quan trọng khác sau. Bây giờ, hãy bắt đầu. Xem chuỗi bên dưới. Nó chứa một bình luận nhiều dòng cũng như dữ liệu bên ngoài nó
var str = `
Hello, World.
/*Goodbye, World.*/Hello again, World.
`
Sử dụng Regex, làm thế nào chúng ta có thể so khớp
" Hello, World. /* Goodbye, World. */ Hello again, World. "
3 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
4 và nội dung bên trong chúng, trong khi vẫn giữ nguyên thông tin bên ngoài các ký tự đó? . Điều này sẽ đơn giản hóa mẫu Regex của chúng ta vì những lý do mà tôi sẽ đề cập sau. Để làm điều này, chúng ta có thể viết Regex dưới đâystr.replace[/\n/g, " "]
Dòng này, sử dụng hàm
" Hello, World. /* Goodbye, World. */ Hello again, World. "
5, sẽ thay thế bất kỳ phiên bản dòng mới nào [" Hello, World. /* Goodbye, World. */ Hello again, World. "
6] bằng một khoảng trắng, hợp nhất nhiều dòng thành một dòng. Biểu thức trên sẽ làm cho chuỗi của chúng ta trông như thế này" Hello, World. /* Goodbye, World. */ Hello again, World. "
Tuyệt quá. Chúng tôi có tất cả dữ liệu trên một dòng, nhưng chúng tôi vẫn có các ký tự nhiều dòng đó. Biểu thức tiếp theo sẽ chăm sóc chúng
Trước khi tiếp tục, hãy xem xét rằng cả
" Hello, World. /* Goodbye, World. */ Hello again, World. "
7 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
8 đều là các ký tự đặc biệt. Điều này có nghĩa là nếu chúng ta cố khớp chúng trong biểu thức của mình, thì chúng ta không thể đặt chúng vào nguyên trạng hoặc biểu thức của chúng ta sẽ cho rằng chúng là một phần của phép toán chứ không phải các ký tự chữ trong mẫuGiả sử chúng ta có chuỗi bên dưới
str.replace[/\n/g, " "]
8Nếu chúng tôi muốn thay thế tất cả các a bằng x, chúng tôi có thể viết cái này
str.replace[/\n/g, " "]
9Điều này sẽ cung cấp cho chúng tôi
" Hello, World. /* Goodbye, World. */ Hello again, World. "
9. Nếu chúng ta thử điều đó với " Hello, World. /* Goodbye, World. */ Hello again, World. "
7, biểu thức sẽ bị hỏngChúng ta cần sử dụng ký tự thoát,
str.replace[/\n/g, " "]
81. Ký tự thoát này sẽ cho phép chúng tôi sử dụng các ký tự đặc biệt của mình làm ký tự chữ. Chúng ta có thể sử dụng ký tự thoát như vậystr.replace[/\n/g, " "]
3Chúng ta có thể sử dụng ký tự thoát để xác định
" Hello, World. /* Goodbye, World. */ Hello again, World. "
3. Xem bên dướistr.replace[/\n/g, " "]
5Chúng tôi đã đối sánh
" Hello, World. /* Goodbye, World. */ Hello again, World. "
3 và thay thế nó bằng str.replace[/\n/g, " "]
84, nhưng chúng tôi cũng cần xác định " Hello, World. /* Goodbye, World. */ Hello again, World. "
4. Thông thường, chúng ta có thể sử dụng ký tự 'thay thế' [str.replace[/\n/g, " "]
86] để khớp với nhiều mẫustr.replace[/\n/g, " "]
0Điều này hiệu quả, nhưng vì chúng tôi không chỉ tìm kiếm hai mẫu đó, nên
str.replace[/\n/g, " "]
86 không phục vụ chúng tôi tốt. Thay vào đó, chúng tôi sẽ sử dụng ký tự str.replace[/\n/g, " "]
88str.replace[/\n/g, " "]
88 có nghĩa là khớp với bất kỳ ký tự nào ngoại trừ ngắt dòng. Chúng tôi đã loại bỏ các ngắt dòng nên không cần phải lo lắng về những điều đóstr.replace[/\n/g, " "]
4Tại sao nó không hoạt động? .
str.replace[/\n/g, " "]
88 có thể giúp thiết lập các quy tắc đối sánh mẫu, nhưng bộ định lượng chỉ định số lượng phiên bản của một ký tự, nhóm hoặc lớp ký tự phải có mặt để khớp. str.replace[/\n/g, " "]
88 không có bộ định lượng sẽ khớp với bất kỳ ký tự nào, nhưng chỉ khớp với ký tự đầu tiên. Dưới đây là một ví dụ hoạt động mà không có bộ định lượngstr.replace[/\n/g, " "]
8Khi chỉ có một ký tự giữa
" Hello, World. /* Goodbye, World. */ Hello again, World. "
3 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
4, hàm " Hello, World. /* Goodbye, World. */ Hello again, World. "
5 của chúng tôi hoạt động vì chỉ có một phiên bản của mẫu đối sánh của chúng tôi. Vì chúng tôi cần có khả năng so khớp bất kỳ [hoặc không có gì] giữa " Hello, World. /* Goodbye, World. */ Hello again, World. "
3 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
4, cách tốt nhất của chúng tôi là sử dụng bộ định lượng " Hello, World. /* Goodbye, World. */ Hello again, World. "
8" Hello, World. /* Goodbye, World. */ Hello again, World. "
8 tìm thấy 0 hoặc nhiều kết quả trùng khớp, nghĩa là BẤT CỨ ĐIỀU GÌ khớp với mẫu theo nghĩa đen [mà nhờ có str.replace[/\n/g, " "]
88, bất kỳ ký tự nào ngoài ngắt dòng] sẽ khớp. Và vì chúng ta đặt hai ký tự này giữa " Hello, World. /* Goodbye, World. */ Hello again, World. "
3 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
4, biểu thức của chúng ta bây giờ sẽ chọn " Hello, World. /* Goodbye, World. */ Hello again, World. "
3 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
4 cũng như TẤT CẢ các phiên bản của bất kỳ ký tự nào ngoài ngắt dòng ở giữa chúng. Đây là Regex của chúng tôi, khi str.replace[/\n/g, " "]
88 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
8 được sử dụng song songstr.replace[/\n/g, " "]
0Như bạn có thể thấy, khớp mẫu của chúng tôi hoạt động và hàm
" Hello, World. /* Goodbye, World. */ Hello again, World. "
5 của chúng tôi đã thay thế khớp bằng str.replace[/\n/g, " "]
84. Để làm cho điều này dễ đọc hơn, hãy thay thế các nhận xét nhiều dòng bằng một khoảng trắng, thay vì str.replace[/\n/g, " "]
84, sau đó thay thế các khoảng trắng thừa được tạo từ việc thay thế mẫu bằng các khoảng trắngnhư vậy
str.replace[/\n/g, " "]
1Tụi mình gần đến nơi rồi. Có một điều nữa chúng ta có thể làm để làm cho điều này dễ đọc hơn. JavaScript có một chức năng gọi là,
str.replace[/\n/g, " "]
50str.replace[/\n/g, " "]
51 được sử dụng để xóa khoảng trắng ở cả hai đầu của chuỗi. Hãy giải quyết vấn đề đó ở cuối hàm thay thế của chúng ta để hoàn thiện chuỗi của chúng tastr.replace[/\n/g, " "]
2Toàn bộ giải pháp của chúng ta sẽ như thế này
str.replace[/\n/g, " "]
3Tóm tắtDưới đây là bảng phân tích các bước phát triển
1. Cho một chuỗi nhiều dòng, thay thế tất cả các dòng mới [được đại diện bởi
" Hello, World. /* Goodbye, World. */ Hello again, World. "
6] bằng một khoảng trắng, chuyển chuỗi nhiều dòng thành một dòng. Điều này sẽ đơn giản hóa Regex của chúng tôi2. Khi chuỗi là một dòng, hãy thực hiện một hàm
" Hello, World. /* Goodbye, World. */ Hello again, World. "
5 khác, lần này sử dụng ký tự thoát để Regex coi các ký tự đặc biệt của chúng tôi là ký tự chữ3. Bao gồm các ký tự
" Hello, World. /* Goodbye, World. */ Hello again, World. "
3 và " Hello, World. /* Goodbye, World. */ Hello again, World. "
4 trong biểu thức của chúng tôi và đặt ký tự str.replace[/\n/g, " "]
88 ở giữa chúng để bao gồm bất kỳ ký tự nào ngoại trừ ngắt dòng [chúng tôi đã xóa những ký tự đó nên bạn không cần lo lắng]4. Định lượng
str.replace[/\n/g, " "]
88 bằng cách thêm " Hello, World. /* Goodbye, World. */ Hello again, World. "
8. Sự kết hợp này sẽ khớp với bất kỳ ký tự nào ở bất kỳ số lượng phiên bản nào giữa chúng5. Sự kết hợp của các ký tự đặc biệt đã thoát và bất kỳ ký tự nào trong bất kỳ số lượng trường hợp nào giữa chúng sẽ cho phép chúng tôi khớp một cách hiệu quả
" Hello, World. /* Goodbye, World. */ Hello again, World. "
3, " Hello, World. /* Goodbye, World. */ Hello again, World. "
4 và bất kỳ ký tự nào ở giữa. Chúng tôi thay thế bộ sưu tập các ký tự này bằng một khoảng trống6. Chúng tôi thực hiện một chức năng
" Hello, World. /* Goodbye, World. */ Hello again, World. "
5 khác, lần này loại bỏ mọi khoảng trắng thừa, được biểu thị bằng str.replace[/\n/g, " "]
02 và thay thế nó bằng một khoảng trắng7. Cuối cùng, chúng tôi sử dụng hàm
str.replace[/\n/g, " "]
50 của JavaScript để xóa khoảng trắng ở cuối chuỗi của chúng tôi, trả về một chuỗi có thể đọc được, có khoảng cách thích hợp với " Hello, World. /* Goodbye, World. */ Hello again, World. "
3, " Hello, World. /* Goodbye, World. */ Hello again, World. "
4 và bất kỳ nội dung nào ở giữa được xóaNếu bạn thích bài đăng hoặc cần làm rõ về bất kỳ điều gì được đề cập, hãy cho tôi biết trong phần bình luận. Đừng quên để lại vỗ tay và chia sẻ