重构Javascript替换方法

重构Javascript替换方法,javascript,Javascript,我试图找出重构javascript替换方法的最佳方法。我需要在许多不同的变量上调用相同的方法,并且不确定重构的最佳实践 function profitMargin(){ var revenue = jQuery("#revenue").val().replace(/[^\d.-]/g, ''); var profit = jQuery("#profit").val().replace(/[^\d.-]/g, ''); var profitMar = (profit/revenue*100).to

我试图找出重构javascript替换方法的最佳方法。我需要在许多不同的变量上调用相同的方法,并且不确定重构的最佳实践

function profitMargin(){
var revenue = jQuery("#revenue").val().replace(/[^\d.-]/g, '');
var profit = jQuery("#profit").val().replace(/[^\d.-]/g, '');
var profitMar = (profit/revenue*100).toFixed(4);

如果希望避免在任何地方重复相同的正则表达式,可以将其放入变量中:

var reNonNumeric = /[^\d.-]/g;
// and then later
var revenue = jQuery("#revenue").val().replace(reNonNumeric, '');
var profit = jQuery("#profit").val().replace(reNonNumeric, '');
// etc.
这使您的代码更加高效,因为它只创建一个regex对象,并且更具描述性(取决于变量的命名方式)

或者您可以创建一个函数来执行该类型的替换:

function removeNonNumericCharacters(val) {
  return val.replace(/[^\d.-]/g, '');
}

// which you'd use later with:
var revenue = removeNonNumericCharacters( jQuery("#revenue").val() );
var profit = removeNonNumericCharacters( jQuery("#profit").val() );
请注意,
收入
利润
变量都将包含字符串。
/
运算符将其操作数转换为数字,但是您正在执行的正则表达式替换实际上并不能确保这种转换是可能的:用户可能输入了“-…-”,您的正则表达式会接受它,但它显然不是有效的数字

String.prototype.yourFunction = function () {
    return this.replace(/[^\d.-]/g, '');
}

var revenue = jQuery("#revenue").val().yourFunction();

希望这能对您有所帮助。

除了@nnnn的答案之外,您还可以将jquery元素存储在变量中,以避免每次调用函数时在DOM中找到它们

var $revenue = jQuery("#revenue"),
    $profit = jQuery("#profit");



// Later in your function
var revenue = $revenue.val().replace(/[^\d.-]/g, '');
var profit = $profit.val().replace(/[^\d.-]/g, '');

您始终可以创建新函数。比如说,
dropNumericPrefix