*(zero or more) trong regular expression
Theo em hiểu thì quantifier *
(zero or more) có tính chất tham lam, cố match nhiều ký tự nhất có thể:
/\d*/.match "123abc"
# => "123"
/\d*/.match "abc123"
# Got: ""
# Expected: "123"
Em mong đợi /\d*/.match "abc123"
sẽ trả về "123"
nhưng không phải. Mọi người có thể giải thích tại sao không ạ?
Trong khi đó, nếu dùng quantifier +
(one or more):
/\d+/.match "abc123"
# => "123"
1 CÂU TRẢ LỜI
\d
: Match với một chữ số có giá trị trong đoạn [0, 9].
a+
: Chứa một hoặc nhiều hơn một ký tự a
liên tiếp.
a*
: Không chứa gì hoặc chứa nhiều ký tự a
liên tiếp.
-
TH
/\d*/
: Sẽ được hiểu là kiểm tra chuỗi không chứa hoặc chứa nhiều chữ số liền nhau. Tương đương với chuỗi đó chứa chuỗi rỗng hoặc chứa một số nguyên dương.abc123
bắt đầu bằngabc
nó ko phải dạng là số nguyên dương nên match với chuỗi rỗng => regex hợp lệ. Return chuỗi rỗng. Vì bạn ko khai báoflag
nào trong regex nên nó sẽ dừng check sau khi regex đã tìm được phần tử hợp lệ. Khai báo flagg
thì nó sẽ tiếp tục check các phần tử tiếp theo. -
TH
\d+
: Regex của bạn sẽ hiểu là kiểm tra chứa số nguyên dương không. Bắt đầu chuỗi làabc
không hợp lệ => check tiếp các phần tử tiếp theo là1
,2
,3
.123
là trường hợp chứa nhiều ký tự số. => Hợp lệ => Dừng check tại đây. Return là123
.