Gần đây chúng tôi đã có một lỗi, sau khi một nhà phát triển đồng nghiệp thay đổi chữ RegExp thành lời gọi hàm tạo và tôi đã tự hỏi tại sao có bất kỳ sự khác biệt nào. Mã chính xác làSự khác biệt giữa Javascript regexp literal và constructor
var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag);
vs bản gốc của
var parts = /rt:([^@]+)@(\d+)/.exec(tag);
Khi tag
được, ví dụ rt:[email protected]
, là người đầu tiên (buggy) gọi trả null
, trong khi cái thứ hai trả ["rt:[email protected]", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]
Không cần phải nói, tôi đã hoàn nguyên sự thay đổi, nhưng tôi muốn biết tại sao lại có sự khác biệt như vậy ở nơi đầu tiên.
Câu trả lời hay, hãy nghĩ tôi sẽ xóa tên của tôi! Điều gì sẽ xảy ra nếu bạn cần sử dụng lại một RegExp cụ thể - đó không phải là thời điểm tốt để sử dụng một hàm tạo? Hoặc bạn sẽ chỉ nói 'var resuasableRegex =/.. pattern ../;'? –
@ElRonnoco: Chính xác, bạn cũng có thể gán một regex cho một biến. –
Cảm ơn thông tin. Lần tới tôi sẽ xem xét các chuỗi tốt hơn, để đảm bảo không có ký tự thoát cần thiết. Dù sao, chữ cũng dễ dàng hơn nhiều. –