Tìm ký tự trong chuỗi JavaScript (indexOf, lastIndexOf) | Laptrinhcanban.com

Tìm ký tự trong chuỗi JavaScript (indexOf, lastIndexOf)

Hướng dẫn cách tìm ký tự trong chuỗi JavaScript. Bạn sẽ học được cách tìm ký tự trong chuỗi JavaScript bằng các phương thức có sẵn như indexOf, lastIndexOf trong bài viết này. Bạn cũng sẽ học được cách tìm vị trí xuất hiện thứ n của ký tự trong chuỗi cho trước bằng một hàm tự viết sau bài học này.

Chúng ta có 3 phương pháp để tìm ký tự trong chuỗi JavaScript như sau:

  • Tìm ký tự xuất hiện đầu tiên từ đầu chuỗi JavaScript (Phương thức indexOf )
  • Tìm ký tự xuất hiện đầu tiên từ cuối chuỗi JavaScript (Phương thức lastIndexOf)
  • Tìm vị trí xuất hiện thứ n của ký tự trong chuỗi JavaScript

Lại nữa, nếu bạn không cần phải tìm vị trí của ký tự trong chuỗi mà chỉ muốn kiểm tra chuỗi chỉ định có tồn tại trong chuỗi ban đầu hay không, hãy sử dụng tới phương pháp includes() nhé.

Tìm ký tự trong chuỗi JavaScript bằng phương thức indexOf

Cú pháp phương thức indexOf trong JavaScript

Chúng ta sử dụng phương thức indexOf trong JavaScript để tìm vị trí ký tự xuất hiện đầu tiên từ đầu chuỗi JavaScript với cú pháp sau đây:

str.indexOf (sub [, index_start] )

Trong đó:

  • sub là chuỗi ký tự cần tìm trong chuỗi str, và có phân biệt chữ hoa chữ thường trong sub
  • index_start là vị trí index bắt đầu tìm kiếm chuỗi sub trong chuỗi str. Và đối số này có thể được lược bỏ.

Kết quả trả về sẽ là index của vị trí ký tự sub xuất hiện đầu tiên tính từ đầu chuỗi str. Và nếu như sub không tồn tại trong str thì phương thức indexOf trong JavaScript sẽ trả về kết quả bằng -1.

Sau đây hãy cùng xem các ví dụ cụ thể sử dụng phương thức indexOf() để tìm ký tự trong chuỗi JavaScript như sau:

Ví dụ 1:

console.log("dictionary".indexOf("io"));
//> 4

ở ví dụ này, chuỗi io xuất hiện đầu tiên tính từ đầu chuỗi dictionary tại vị trí có index là 4, do đó phương thức indexOf trong JavaScript sẽ trả về kết quả là 4.

dictionary
----------
0123456789

Ví dụ 2:

console.log("Good School".indexOf("oo"));
//> 1

ở ví dụ thứ hai, chuỗi oo xuất hiện hai lần trong chuỗi Good School, tuy nhiên phương thức indexOf trong JavaScript sẽ chỉ trả về index tại vị trí chuỗi oo xuất hiện đầu tiên tính từ đầu chuỗi mà thôi.

Good School
-----------
012345678910

Ví dụ 3:

console.log("Goooood".indexOf("oo"));
//> 1

ở ví dụ thứ ba, chuỗi oo xuất hiện liên tục 4 lần trong chuỗi Goooood, tuy nhiên phương thức indexOf trong JavaScript sẽ chỉ trả về index tại vị trí chuỗi oo xuất hiện đầu tiên tính từ đầu chuỗi mà thôi.

Goooood
-------
0123456

Ví dụ 4:

console.log("Orange".indexOf("aa"));
//> -1

ở ví dụ thứ tư, chuỗi aa do không trong chuỗi Orange, do đó kết quả trả về sẽ là -1

Lưu ý là JavaScript phân biệt chữ hoa chữ thường khi tìm kiếm ký tự bằng IndexOf, nên bạn cần phải viết chính xác ký tự cần tìm kiếm khi sử dụng phương thức này. Ví dụ:

let str = 'abc123abc';

console.log(str.indexOf('c1'));
//> 2
console.log(str.indexOf('C1'));
//> -1

Chỉ định vị trí bắt đầu tìm kiếm ký tự trong phương thức indexOf

Chúng ta có thể sử dụng đối số index_start để chỉ định vị trí bắt đầu tìm kiếm ký tự trong phương thức indexOf.

Khi có index_start, JavaScript sẽ tiến hành tìm kiếm ký tự đã cho trong phạm vi từ index bắt đầu này cho tới cuối chuỗi ban đầu.

Ngược lại, nếu chúng ta lược bỏ đi đối số này thì mặc định index_start sẽ bằng 0 và JavaScript sẽ tiến hành tìm kiếm ký tự đã cho từ đầu đến cuối chuỗi ban đầu.

Ví dụ cụ thể, chúng ta sẽ so sánh kết quả giữa hai phép tìm ký tự trong chuỗi JavaScript bằng indexOf() khi có và không có chỉ định index_start như sau:

let str = 'abc1def2abc';

console.log(str.indexOf('bc'));
//> 1
console.log(str.indexOf('bc', 5));
//> 9

Tìm ký tự trong chuỗi JavaScript bằng phương thức lastIndexOf

Cú pháp phương thức lastIndexOf trong JavaScript

Chúng ta sử dụng phương thức lastIndexOf trong JavaScript để tìm vị trí ký tự xuất hiện đầu tiên từ cuối chuỗi JavaScript với cú pháp sau đây:

str.lastIndexOf (sub [, index_start] )

Trong đó:

  • sub là chuỗi ký tự cần tìm trong chuỗi str, và có phân biệt chữ hoa chữ thường trong sub
  • index_start là vị trí index bắt đầu tìm kiếm chuỗi sub trong chuỗi str. Và đối số này có thể được lược bỏ.

Kết quả trả về sẽ là index của vị trí ký tự sub xuất hiện đầu tiên tính từ cuối chuỗi str. Và nếu như sub không tồn tại trong str thì phương thức lastIndexOf trong JavaScript sẽ trả về kết quả bằng -1.

Sau đây hãy cùng xem các ví dụ cụ thể sử dụng phương thức lastIndexOf() để tìm ký tự trong chuỗi JavaScript như sau:

Ví dụ 1:

console.log("dictionary".lastIndexOf("io"));
//> 4

ở ví dụ này, chuỗi io xuất hiện đầu tiên tính từ cuối chuỗi dictionary tại vị trí có index là 4, do đó phương thức lastIndexOf trong JavaScript sẽ trả về kết quả là 4.

dictionary
----------
0123456789

Ví dụ 2:

console.log("Good School".lastIndexOf("oo"));
//> 8

ở ví dụ thứ hai, chuỗi oo xuất hiện hai lần trong chuỗi Good School, tuy nhiên phương thức lastIndexOf trong JavaScript sẽ chỉ trả về index tại vị trí chuỗi oo xuất hiện đầu tiên tính từ cuối chuỗi mà thôi.

Good School
-----------
012345678910

Ví dụ 3:

console.log("Goooood".lastIndexOf("oo"));
//> 4

ở ví dụ thứ ba, chuỗi oo xuất hiện liên tục 4 lần trong chuỗi Goooood, tuy nhiên phương thức lastIndexOf trong JavaScript sẽ chỉ trả về index tại vị trí chuỗi oo xuất hiện đầu tiên tính từ cuối chuỗi mà thôi.

Goooood
-------
0123456

Ví dụ 4:

console.log("Orange".lastIndexOf("aa"));
//> -1

ở ví dụ thứ tư, chuỗi aa do không trong chuỗi Orange, do đó kết quả trả về sẽ là -1

Lưu ý là JavaScript phân biệt chữ hoa chữ thường khi tìm kiếm ký tự bằng IndexOf, nên bạn cần phải viết chính xác ký tự cần tìm kiếm khi sử dụng phương thức này. Ví dụ:

let str = 'abc123abc';

console.log(str.lastIndexOf('bc'));
//> 7
console.log(str.lastIndexOf('Bc'));
//> -1

Chỉ định vị trí bắt đầu tìm kiếm ký tự trong phương thức lastIndexOf

Chúng ta có thể sử dụng đối số index_start để chỉ định vị trí bắt đầu tìm kiếm ký tự trong phương thức lastIndexOf.

Khi có index_start, JavaScript sẽ tiến hành tìm kiếm ký tự đã cho trong phạm vi từ index bắt đầu này cho tới đầu chuỗi ban đầu.

Ngược lại, nếu chúng ta lược bỏ đi đối số này thì mặc định index_start sẽ bằng 0 và JavaScript sẽ tiến hành tìm kiếm ký tự đã cho từ cuối cho đến đầu chuỗi ban đầu.

Ví dụ cụ thể, chúng ta sẽ so sánh kết quả giữa hai phép tìm ký tự trong chuỗi JavaScript bằng lastIndexOf() khi có và không có chỉ định index_start như sau:

let str = 'abc1def2abc';

console.log(str.lastIndexOf('bc'));
//> 9
console.log(str.lastIndexOf('bc', 5));
//> 1

Sự khác biệt giữa IndexOf() và lastIndexOf()

Qua các phân tích ở trên chúng ta có thể nhận ra, hai phương thức IndexOf() và lastIndexOf() tuy cùng được sử dụng để tìm kiếm ký tự trong chuỗi JavaScript, nhưng về bản chất chúng là hai phương thức hoàn toàn đối lập nhau.

Phương thức IndexOf() sẽ bắt đầu tìm kiếm ký tự chỉ định từ đầu chuỗi ban đầu, trong khi phương thức lastIndexOf() thì ngược lại, sẽ bắt đầu tìm kiếm từ vị trí cuối cùng của chuỗi.

Do phạm vi tìm kiếm của hai phương thức này là khác nhau nên kết quả tìm kiếm của chúng cũng khác nhau như sau:

let str = 'abc123abc';

console.log(str.indexOf('bc'));
//> 1
console.log(str.lastIndexOf('bc'));
//> 7

Tìm vị trí xuất hiện thứ n của ký tự trong chuỗi JavaScript

Trong JavaScript không tồn tại phương pháp trực tiếp nào để giúp chúng ta tìm vị trí xuất hiện thứ n của ký tự trong chuỗi JavaScript. Do đó chúng ta cần phải tự viết phương pháp riêng để giải quyết bài toán này.

Kiyoshi đã tham khảo và cải tiến ví dụ trên developer.mozilla.org để hoàn thành một hàm có tác dụng tìm vị trí xuất hiện thứ n của ký tự trong chuỗi JavaScript như sau:

function findString(sub, str, n) {
let count=0;
for (let i = 0; i < str.length; ++i) {
//Cắt chuỗi con từ chuỗi ban đầu có cùng độ dài với chuỗi cần thay thế.
//Sau đó so sánh chuỗi con này với chuỗi cần thay thế để tìm ra vị trí chuỗi cần thay thế
if (str.substring(i, i + sub.length) == sub) {
count += 1;
if (count == n){
count = i;
break;
}
}
}
console.log(count)
return count
}

Trong đó các tham số sử dụng trong hàm là

  • str: chuỗi ban đầu
  • sub: chuỗi cần tìm
  • n : vị trí thứ n cần tìm của ký tự sub trong chuỗi str ban đầu.

Ví dụ, chúng ta gọi hàm trên để tìm vị trí xuất hiện thứ n của ký tự o hoặc chuỗi ký tự oo trong chuỗi Good School như sau:

findString('oo','Good School',2)
//> 8

findString('o','Good School',2)
//> 2

Trong hàm có sử dụng tới vòng lặp for và phương thức substring để tìm ra vị trí của chuỗi sub trong chuỗi ban đầu.

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn các cách tìm ký tự trong chuỗi JavaScript rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về JavaScript trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.