Différences entre le JavaScript regexp littéral et le constructeur

nous avons eu récemment un bug, Après qu'un autre développeur a changé un RegExp littéral en un appel constructeur, et je me demandais pourquoi il y avait une différence. Le code exact était

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

vs l'original de

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

Quand tag, par exemple rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077, le premier (buggy) appel renvoie null, tandis que la seconde renvoie["rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]

Inutile de dire que j'ai repris les changer, mais j'aimerais savoir pourquoi il y a une différence dans la première lieu.

17
demandé sur Noam Gal 2011-11-01 14:05:46

2 réponses

Il y a deux problèmes:

/ partie de l'expression. Ils sont délimiteurs, marquant un regex littéral. Ils doivent être supprimés si vous utilisez