Когда регулярное выражение приходит из строки, каждый обратный слеш должен быть замаскирован:
var re = new RegExp("(?:http:\\/\\/)?(?:www.)?facebook\\.com\\/(?:profile\\.php\\?id=(?=\\d.*))?([\\w\\-]*)?");
В javascript вы также можете создавать шаблоны регулярных выражений без строк:
var re = /(?:http:\/\/)?(?:www.)?facebook\.com\/(?:profile\.php\?id=(?=\d.*))?([\w\-]*)?/;