我试图找出重构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);
答案 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() );
请注意,revenue
和profit
变量的任何一种方式都包含字符串。 /
运算符将其操作数转换为数字,但正则表达式取代您所做的并不能确保可以进行此类转换:用户可能已输入" -..-& #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, '');