*(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.abc123bắt đầu bằngabcnó 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áoflagnà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 flaggthì 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àabckhông hợp lệ => check tiếp các phần tử tiếp theo là1,2,3.123là trường hợp chứa nhiều ký tự số. => Hợp lệ => Dừng check tại đây. Return là123.