Asked Jan 15th, 2018 2:47 AM 58 0 1
  • 58 0 1
0

*(zero or more) trong regular expression

Share
  • 58 0 1

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 ANSWERS


Answered Jan 15th, 2018 3:26 AM
Accepted
+6

\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ằng abc 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áo flag 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 flag g 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.

Share