2013-05-20 36 views
21

Làm cách nào để triển khai Regexp trong TypeScript?RegExp trong TypeScript

Ví dụ của tôi:

var trigger = "2" 
var regex = new RegExp('^[1-9]\d{0,2}$', trigger); // where I have exeption in Chrome console 

Trả lời

22

Tôi nghĩ rằng bạn muốn test RegExp của bạn trong nguyên cảo, vì vậy bạn phải làm như thế này:

var trigger = "2", 
    regexp = new RegExp('^[1-9]\d{0,2}$'), 
    test = regexp.test(trigger); 
alert(test + ""); // will display true 

Bạn nên đọc MDN Reference - RegExp, đối tượng RegExp chấp nhận hai tham số patternflags không có giá trị (có thể bỏ qua/không xác định). Để kiểm tra regex của bạn, bạn phải sử dụng phương thức .test(), không chuyển chuỗi bạn muốn kiểm tra bên trong khai báo RegExp của bạn!

Tại sao test + ""?alert() trong TS chấp nhận một chuỗi làm đối số, tốt hơn là viết theo cách này. Bạn có thể thử mã đầy đủ here.

+0

nếu var kích hoạt = "10", regexp = RegExp mới ('^ [1-9] \ d {0,2} $'), thử nghiệm = regexp.test (kích hoạt); cảnh báo (test + ""); return return false, nó không chính xác – zrabzdn

+0

Thay thế mẫu regex hiện tại của bạn bằng cách này: ''^ ([0-9] \ d {0,2}) + $' ' –

+2

Bởi vì bạn đang tạo đối tượng RegExp từ một chuỗi, bạn sẽ cũng cần phải thoát dấu gạch chéo ngược: 'new RegExp ('^ [1-9] \\ d {0,2} $')' hoặc sử dụng ký pháp regex: '/^[1-9] \ d {0, 2} $/' –

11

Bạn có thể làm chỉ là:

var regex = /^[1-9]\d{0,2}$/g 
regex.test(2) // outputs true 
+0

Điều này dường như không hoạt động ở dạng số (ít nhất là 2.1) – ghostbust555

+0

Có vẻ như chữ ký của RegExp.test đã thay đổi thực sự (hoặc sửa thành https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/RegExp/test) trong đó phương pháp thử đang chờ chuỗi bây giờ. Cảm ơn bạn đã chỉ ra – sebas2day

-1
let pattern=new RegExp("^-?[0-9]+(\.[0-9]+)?") 
result=pattern.isMatch("hi") //returns false