Различия между литералом регулярного выражения Javascript и конструктором

Недавно у нас была ошибка, после того как другой разработчик изменил литерал RegExp на вызов конструктора, и мне было интересно, почему вообще есть какая-то разница. {{1} } Точный код был

var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag);

по сравнению с оригиналом

var parts = /rt:([^@]+)@(\d+)/.exec(tag);

. Когда тег - это, например, rt: 60C1C036-42FA-4073-B10B-1969BD2358FB @ 00000000077 , первый ( buggy) возвращает null , а второй возвращает ["rt: 60C1C036-42FA-4073-B10B-1969BD2358FB @ 00000000077", "60C1C036-42FA-4073-B10B-1969BD2358FB", " 00000000077 "]

Излишне говорить, что я отменил изменение, но я хотел бы знать, почему вообще существует такая разница.

21
задан Noam Gal 1 November 2011 в 10:05
поделиться