You have a "beginning of text" marker in your regex. This is why it doesn't match the dot, or the parenthesis.
var amountNum= amountStr.replace( /\D+/g, '');
will replace all non-digits in a string. However you need your dot in place, thus this should be used:
var amountNum= amountStr.replace( /[^\d\.]+/g, '');
Next, to make sure that you actually have a number (not a string), so you can perform correct adding, use this:
var amountNum = parseFloat(amountStr.replace( /[^\d\.]+/g, ''));
But, in case you have strings like "iPhone3 ($45.00)", the result will be 345, instead of 45. You need to find exactly what you need in this string, instead of looking for what you don't need. An example would be this:
var amountNum = parseFloat(amountStr.match( /\d+(\.\d+)?/g)[0]);
This will also not work with "iPhone3", but at least you won't have 345, but just 3.
So just look for the last number, like this:
var amountNum = parseFloat(amountStr.match( /\d+(\.\d+)?/g).pop());