Hàm substr() và substring(), slice() cắt chuỗi trong Javascript

Hàm substr() và substring(), slice() đều là hàm cắt chuỗi trong Javascript. Nhưng mỗi hàm lại có công dụng và hành vi riêng của nó, những bạn mới tìm hiểu Javascript rễ hiểu lầm 2 hàm substr() và substring() giống nhau. Dưới đây là công dụng và cách sử dụng từng hàm.

1. Hàm substr()
Cấu trúc: string.substr(start[, length]);
  - start: là vị trí bắt đầu
  - length: là độ dài chuỗi con cần lấy tính từ vị trí bắt đầu

VD1:
var str="abcdefghijklmnopq";
document.write(str.substr(0,3)); //Từ đầu chuỗi lấy thêm 3 ký tự. Kết quả: "abc"
document.write(str.substr(3,5)); //Từ vị trí thứ 3 lấy thêm 5 ký tự. Kết quả: "defgh"

Nếu vị trí bắt đầu là số âm, hàm sẽ đếm ngược từ cuối chuỗi.
VD2:
var str="abcdefghijklmnopq";
document.write(str.substr(-10,4)); //từ vị trí thứ 10 tính từ cuối chuỗi lấy thêm 4 ký tự. Kết quả: "hijk"
  • Nếu độ dài (length) bằng 0 sẽ trả về 1 sâu rỗng
  • Nếu độ dài là giá trị âm (<0) sẽ được tính như là 0
  • Nếu khuyết độ dài (length) hàm sẽ trả về chuỗi con được tính từ vị trí bắt đầu đến cuối chuỗi.
VD3:
var str="abcdefghijklmnopq";
document.write(str.substr(3)); //Tính từ vị trí thứ 3 đến cuối chuỗi. Kết quả: "defghijklmnopq"
document.write(str.substr(-5)); //Tính từ vị trí thứ 5 (đếm từ cuối chuỗi) đến cuối chuỗi. Kết quả: "mnopq"

2. Hàm substring()
Cấu trúc: string.substring(start[, stop]);
 - strart: vị trí bắt đầu
 - stop: vị trí kết thúc
VD4:
var str="abcdefghijklmnopq";
document.write(str.substring(0,3)); //Lấy từ đầu chuỗi đến vị trí tứ 3. Kết quả: "abc"

document.write(str.substring(3,8)); //Lấy từ vị trí thứ 3 đến vị trí thứ 8. Kết quả: "defgh"
  • Nếu start bằng stop nó sẽ trả về chuỗi rỗng.
  • Nếu 1 trong 2 giá trị (start, stop) âm (nhỏ hơn 0) nó sẽ được xử lý như là 0
  • Nếu start > stop nó sẽ đổi vị trí 2 đối số.
  • Nếu 1 trong 2 giá trị (start, stop) lớn hơn chiều dài của chuỗi sẽ được xử lý bằng độ dài của chuỗi. (Nó cũng giống như bị khuyết giá trị đó)
  • Nếu bỏ qua stop (khuyết stop) sẽ lấy từ vị trí bắt đầu đến cuối chuỗi. (điều này giống với hàm substr())

3. Hàm slice(): hoạt động như substring() nhưng có một số hành vi khác nhau.
Cấu trúc: string.slice(start[, stop]);
 - Nếu giá trị kết thúc (stop) được bỏ qua cũng như hàm substring() sẽ tính từ vị trí bắt đầu đến cuối chuỗi.
 - Nếu start > stop, slice() sẽ không trao đổi 2 đối số. (Được con là điều kiện sai, trả về chuỗi rỗng)
 - Nếu start là số âm (<0), slice() sẽ thiết vị trí đếm từ cuối chuỗi, giống như substr(). Trong trường hợp đếm từ cuối chuỗi nhưng vị trí bắt đầu vẫn vượt vị trí kết thúc trong chuỗi nó sẽ giống như trường hợp start > stop. VD:
var str="abcdefghijklmnopq";
document.write(str.slice(-10,8)); Tính từ vị trí thứ 10 đếm ngược từ cuối chuỗi đến vị trí thứ 8 đếm từ đầu chuỗi. Kết quả: "h"

 - Nếu stop là âm, thì vị trí kết thúc cũng sẽ được tính từ cuối chuỗi đếm ngược lại.
var str="abcdefghijklmnopq";
document.write(str.slice(-10,-7)); Tính từ vị trí thứ 10 đếm ngược từ cuối chuỗi đến vị trí thứ 8 đếm ngược từ cuối chuỗi. Kết quả: "hij"
*Chú ý khi sử dụng slice() bạn có thể cho giá trị dương hoặc âm (tức là đếm từ đầu hoặc cuối chuỗi) nhưng vị trí bắt đầu không được vượt quá vị trí kết thúc, nếu không sẽ được coi là sai.

Các bạn hãy thử thay đổi giá trị của 2 đối số trong các hàm để hiểu rõ hơn về cách hoạt động của nó.

10 nhận xét:

  1. ví dụ mình có một chuỗi "abc/def/kg.jpg". Mình muốn lấy từ dấu "/" cuối cùng đến hết thì phải làm sao? (kết quả mong muốn: kg.jpg). Mong bạn giúp cho!

    Trả lờiXóa
  2. $text = "abc/def/kg.jpg";
    $arrText = @explode("/", $text);
    $result = end($arrText); //$result="kg.jpg";

    Trả lờiXóa
  3. Chào bạn
    Mình muốn lấy 1 ô text kiểu ngày tháng
    ví dụ tên teextbox: text-ngay(11/01/2017) để đưa vào 3 textbox khác nhau: tex-ngay(11), text-thang(01) textnam(2017)
    Vậy hàm trên đưa vào như thế nào.

    thanks

    Trả lờiXóa
    Trả lời
    1. Var text = 11/01/2017;
      Var arrT = text.split('/');
      tex-ngay(arrT[0]);
      text-thang(arrT[1]);
      text-nam(arrT[2]);

      Xóa
  4. mình có 1 đoạn văn mình muốn cắt tât cả các dấu cách làm sao nhỉ

    Trả lờiXóa
  5. mình có một chuỗi String RxBuff = "";
    RxBuff lấy chuỗi từ serial có dạng +CMT: "+841695311094","","18/04/16,16"
    +CMT: "+84 luôn giữ nguyên con đằng sau luôn thay đôi
    mình muốn tach lấy sdt +841695311094
    minh code
    String so_sms = ""

    so_sms(RxBuff.substring(7[, 13]));
    Serial.println(so_sms);
    mà báo lỗi exit status 1
    expected primary-expression before ',' token
    mình lập trinh c trên arduino ide

    Trả lờiXóa
  6. chào bạn
    mình muốn lấy số 20 ở trong đoạn text sau thì làm ntn ạ
    text: Showing 1–20 of 452 results

    Trả lờiXóa
  7. Nặc danh16:25 27/10/21

    ví dụ mình có một chuỗi "abc\def\kg.jpg". Mình muốn lấy từ dấu "\" cuối cùng đến hết thì phải làm sao? (kết quả mong muốn: kg.jpg). Mong bạn giúp cho!

    Trả lờiXóa