9. Tìm kiếm một chuỗi trong JavaScript

Chúng ta có 3 hàm thường dùng để tìm kiếm chuỗi trong Js là:

  • indexOf()
  • lastIndexOf()
  • search()

9.1. Hàm indexOf()

Để tìm kiếm một chuỗi con thì ta sử dụng hàm String.indexOf(str) trong đó:

  • str : là chuỗi con
  • string : là chuỗi cha

Hàm này sẽ trả về kết quả là vị trí xuất hiện đầu tiên của chuỗi (bắt đầu luôn là 0 nhé) và nếu không tìm thấy chuỗi thì nó sẽ trả về kết quả là -1.

Ví dụ:

var string = "Chào mừng bạn đến với laptrinhtudau.com";
document.write("Vị trí xuất hiện chuỗi laptrinhtudau.com là: " + string.indexOf("laptrinhtudau.com"));

Hay một ví dụ khác:

let str = "học lập trình tại laptrinhtudau.com";
str.indexOf("thanh nguyen");
//kết quả trả về là -1 

Chú ý

Phải luôn nhớ là Js đếm từ 0. Ở đây 0 là vị trí đầu tiên trong chuỗi, 1 là vị trí thứ 2, 2 là vị trí thứ 3 ,…

9.2. Hàm lastIndexOf()

Trường hợp nếu chuỗi con xuất hiện nhiều lần trong chuỗi cha thì sao? Kết quả sẽ chả về vị trí xuất hiện đầu tiên của chuỗi con. Vậy nếu ta lại muốn trả về vị trí cuối cùng của chuỗi con thì sao? Ở đây ta sẽ dùng hàm String.lastIndexOf(str). Các thông số của hàm String.lastIndexOf(str) tương tự như hàm indexOf() và sẽ trả về vị trí xuất hiện của chuỗi con cuối cùng. Nếu không tìm thấy chuỗi con thì cũng sẽ trả về -1.

Ví dụ:

var string = "laptrinhtudau.com - học lập trình từ con số 0 tại laptrinhtudau.com";
document.write("Vị trí xuất hiện chuỗi laptrinhtudau.com là: " + string.lastIndexOf("laptrinhtudau.com"));

Hoặc một ví dụ khác:

let str = "học lập trình tại laptrinhtudau.com"; 
str.lastIndexOf("thanh nguyen"); //kết quả trả về là -1

Lưu ý

  • Cả 2 hàm indexOf() và lastIndexOf() đều chấp nhận tham số thứ 2 làm vị trí bắt đầu cho tìm kiếm.
let str = "Học lập trình tại laptrinhtudau.com!";
str.indexOf("lập", 15);
  • Hãy nhớ rằng phương thức lastIndexOf () tìm kiếm ngược lại, vì vậy vị trí 15 có nghĩa là bắt đầu tìm kiếm ở vị trí 15 và tìm kiếm đến đầu.
let str = "Học lập trình tại laptrinhtudau.com!"; 
str.lastIndexOf("laptrinhtudau", 15);

9.3. Hàm search()

Ngoài 2 hàm trên thì ta có thể sử dụng hàm string.search(str) để tìm kiếm tác dụng của nó cũng tương tự hàm string.indexOf(str).

Ví dụ:

var string = "Chào mừng bạn đến với laptrinhtudau.com";
document.write("Vị trí xuất hiện chuỗi laptrinhtudau.com là: " + string.search("laptrinhtudau.com"));

Chú ý

Sau khi tìm hiểu thì các bạn có thể nhầm lẫn rằng indexOf() và search() tương tự nhau. Vì cả 2 đã đều chấp nhận các thông số giống nhau và đều trả về cùng một giá trị. Nhưng thực ra cả 2 phương thức này không giống nhau và có những điểm khác biệt riêng:

  • search() không thể sử dụng thông số thứ hai làm vị trí bắt đầu tìm kiếm.
  • indexOf() không thể thực thi các giá trị tìm kiếm mạnh mẽ hơn (biểu thức chính quy).

10. Thay thế nội dung của chuỗi trong JavaScript

Phương thức replace() thay thế một giá trị được chỉ định bằng một giá trị khác trong một chuỗi. Cú pháp của nó rất đơn giản là:

string.replace(nội dung cũ, nội dung mới)

Ví dụ:

str = "Chào buổi sáng.";
var n = str.replace("sáng", "tối");
document.write(n);

10.1. Thay thế nội dung trùng khớp

Mặc định thì replace() sẽ thay thế nội dung trùng khớp được thay thế đầu tiên.

Ví dụ:

var text = “Tài liệu học HTML và tài liệu học Js”;
var a = text.replace(“học”, “tham khảo”);
//Trong chuỗi text bên dưới có hai chữ “học”, tuy nhiên chỉ có chữ học đầu tiên là được đổi thành chữ “tham khảo”
document.write(a);

Và để thay thế tất cả nội dung trùng khớp ta sẽ sử dụng biểu thức chính quy sau:

var text = “Tài liệu học HTML và tài liệu học Js”;
var a = text.replace(/học/g, “tham khảo”);
document.write(a);

Ta sẽ tìm hiểu kỹ hơn về biểu thức chính quy ở những bài học sau nhé!

10.2. Thay thế nội dung với phân biệt chữ hoa chữ thường

Trong Js thì mặc định replace() có phân biệt chữ hoa chữ thường.

Ví dụ:

var text = “Tài liệu học Js”;
var a = text.replace(“HọC”, “tham khảo”);
document.write(a);

Nhưng để thay thế nội dung trùng khớp mà không phân biệt trường hợp chữ in hoa hay chữ thường thì ta sử dụng biểu thức chính quy sau:

var text = “Tài liệu học Js”;
var a = text.replace(/HọC/i, “tham khảo”);
document.write(a);

11. Trích xuất ký tự trong chuỗi trong JavaScript

Có 3 phương thức mà an toàn khi trích xuất ký tự trong chuỗi:

  • charAt()
  • charCodeAt()
  • Property access [ ]

11.1. Phương thức charAt()

Phương thức charAt() trả về một ký tự nằm ở index ( chỉ số vị trí) được chỉ định ở trong một chuỗi.

Ví dụ:

var str = "Laptrinhtudau";
str.charAt(0); // Trả về ký tự L

11.2. Phương thức charCodeAt()

Phương thức charCodeAt() trả về mã unicode của một ký tự nằm ở index (chỉ số vị trí) được chỉ định trong một chuỗi. Phương thức sẽ trả về mã UTF-16 dưới dạng số nguyên trong khoảng từ 0 đến 65535

Ví dụ:

var str = "HELLO WORLD!"
str.charCodeAt(0); //Trả về 72

12. Chuyển đổi một chuỗi thành một mảng trong JavaScript

Để chuyển một chuỗi sang mảng thì ta sử dụng hàm split() với tham số truyền vào là ký tự ngăn cách giữa các phần tử.

Ví dụ:

string = "Welcome laptrinhtudau.com";
 
// Tạo thành mảng với mỗi phần tử ngăn bởi khoảng trắng
// kết quả là mảng có hai phần tử gồm: welcome và laptrinhtudau.com
document.write(string.split(" ").length);

Nếu thiếu ký hiệu tách chuỗi, mảng được trả về sẽ chứa toàn bộ chuỗi với index [0]. Nếu ký hiệu tách chuỗi là “”, mảng được trả về sẽ là một mảng với từng ký tự ở từng index

Ví dụ:

var txt = "Hello";
txt.split("");  // Tách chuỗi thành từng ký tự