重构Javascript替换方法

时间:2014-07-06 02:14:46

标签: 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).toFixed(4);

3 个答案:

答案 0 :(得分:1)

如果你想避免在任何地方重复相同的正则表达式,你可以把它放在变量中:

var reNonNumeric = /[^\d.-]/g;
// and then later
var revenue = jQuery("#revenue").val().replace(reNonNumeric, '');
var profit = jQuery("#profit").val().replace(reNonNumeric, '');
// etc.

这使得您的代码更有效率,因为它只创建一个正则表达式对象,并且更具描述性(取决于您如何命名变量)。

或者你可以创建一个函数来进行这种替换:

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() );

请注意,revenueprofit变量的任何一种方式都包含字符串。 /运算符将其操作数转换为数字,但正则表达式取代您所做的并不能确保可以进行此类转换:用户可能已输入" -..-& #34;,你的正则表达式会接受,但显然不是有效数字。

答案 1 :(得分:0)

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

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

希望这可以帮到你。

答案 2 :(得分:0)

除了@nnnnnn的答案之外,你还可以在变量中存储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, '');