2015-05-16 36 views
5

Tôi có một chuỗi.Javascript RegExp '*' không hoạt động như mong đợi

var string="ghtykj"; 
var pattern = "t*y"; 

Khi tôi cung cấp RegExp (mẫu) .test (chuỗi) mới trả về đúng (như mong đợi).

var pattern = "t*g"; 

Nhưng mẫu này cũng trả về giá trị đúng.

Tôi đã mong đợi mẫu này trả về false, vì t * g có nghĩa là t theo sau là số không hoặc nhiều ký tự, tiếp theo là g.

Nếu đây thực sự là hành vi mong đợi, có thể bất kỳ ai sửa lỗi cho tôi khi tôi đang làm sai không?

+0

Bạn có vẻ nhầm lẫn các cụm từ thông dụng với glob: http: //en.wikipedia.org/wiki/Glob_% 28programming% 29 –

Trả lời

8

* không phải là ký tự đại diện trong cụm từ thông dụng, là định lượng. Nó có cùng ý nghĩa với số lượng {0,}, tức là xác định rằng biểu thức trước nó (trong trường hợp này ký tự t) có thể xảy ra bằng không hoặc nhiều lần.

Mẫu t*g không có nghĩa là t theo sau là số không hoặc nhiều ký tự, tiếp theo là g. Nó có nghĩa là không hoặc nhiều ký tự t, tiếp theo là một g.

Mẫu t*g sẽ khớp với ví dụ tg hoặc tttttg, nhưng cũng chỉ g. Vì vậy, nó khớp với ký tự g ở đầu chuỗi.

Để lấy mẫu phù hợp với t theo sau là số không hoặc nhiều ký tự, theo sau là g, bạn sẽ sử dụng t.*g (hoặc t[\w\W]*g để xử lý ngắt dòng trong chuỗi).

1
var pattern = "t.*g"; 

phải là đúng. t* có nghĩa là 0 hoặc bất kỳ số nào của t, đúng là

6

vì t * g có nghĩa là t theo sau là số không hoặc nhiều ký tự, theo sau là g.

Điều này không đúng. Điều này có nghĩa là 0 hoặc nhiều hơn t, vì vậy t là tùy chọn.

Bạn có thể suy nghĩ thay vì Globbing trong vỏ thiết bị đầu cuối, nơi toán tử * sẽ hoạt động như bạn mong đợi. Tuy nhiên Globbing * có hành vi khác với RegEx *.

Bạn muốn

var pattern = "t.*g"; 

Điều này có nghĩa, . là tùy chọn (0 hoặc nhiều lần), nhưng phải có một t.

Trong Cụm từ thông dụng, .matches almost any character.

3

Bạn nên kiểm tra regex của mình tại đây: regex101, nó sẽ dịch regex sang tiếng Anh để dễ hiểu hơn.

+1

Nó giống như một bình luận, nhưng ok –

+0

Tôi không thể thêm một bình luận b.c Tôi có đại diện thấp. – Zapp

+1

Vì vậy, tôi sẽ giúp bạn với +10 đại diện .. =) –

Các vấn đề liên quan