Nhiều lần tôi đang sử dụng match
hàm chuỗi để biết một chuỗi có khớp với biểu thức chính quy hay không.
if(str.match(/{regex}/))
Có sự khác biệt nào giữa cái này không:
if (/{regex}/.test(str))
Họ dường như cho kết quả tương tự?
Nhiều lần tôi đang sử dụng match
hàm chuỗi để biết một chuỗi có khớp với biểu thức chính quy hay không.
if(str.match(/{regex}/))
Có sự khác biệt nào giữa cái này không:
if (/{regex}/.test(str))
Họ dường như cho kết quả tương tự?
Câu trả lời:
Trước tiên, hãy xem mỗi chức năng làm gì:
regexObject . kiểm tra ( Chuỗi )
Thực hiện tìm kiếm đối sánh giữa một biểu thức chính quy và một chuỗi được chỉ định. Trả về đúng hay sai .
chuỗi . khớp ( RegExp )
Được sử dụng để truy xuất các kết quả khớp khi khớp chuỗi với biểu thức chính quy. Trả về một mảng với các kết quả khớp hoặc
null
nếu không có.
Kể từ khi null
đánh giá false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Có sự khác biệt nào về hiệu suất không?
Có . Tôi tìm thấy ghi chú ngắn này trong trang MDN :
Nếu bạn cần biết một chuỗi có khớp với biểu thức chính quy hay không, hãy sử dụng regrec.test (chuỗi).
Là sự khác biệt đáng kể?
Câu trả lời một lần nữa là CÓ ! JsPerf này tôi đặt cùng nhau cho thấy sự khác biệt là ~ 30% - ~ 60% tùy thuộc vào trình duyệt:
Sử dụng .test
nếu bạn muốn kiểm tra boolean nhanh hơn. Sử dụng .match
để truy xuất tất cả các trận đấu khi sử dụng g
cờ toàn cầu.
.test()
. :)
Đừng quên xem xét cờ toàn cầu trong regrec của bạn:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Điều này là do Regapi theo dõi chỉ số cuối cùng khi tìm thấy kết quả khớp mới.
.test()
gì? không phải là điểm .test()
để kiểm tra xem chuỗi có regex phù hợp không?
Đây là kết quả điểm chuẩn của tôi
kiểm tra 4.267.740 ops / giây ± 1.32% (60 lần lấy mẫu)
thực hiện 3.649.719 ops / giây ± 2.51% (60 lần lấy mẫu)
khớp 3,623,125 ops / giây ± 1,85% (62 lần lấy mẫu)
indexOf 6.230.325 ops / giây ± 0.95% (62 lần lấy mẫu)
phương thức kiểm tra nhanh hơn phương thức so khớp, nhưng phương pháp nhanh nhất là indexOf