这是我的代码:

function PlusMinus() {
  str = str.replace(/([^\d\.](?!.*[^\d\.]))/, function(m, $1) {
    if ($1 == "-") return "";
    return $1 + "-";
  });
}


而且它不起作用。

我想做的是找到最后一个出现的不是数字(0-9)或点(。)的字符,然后如果它是“-”,则将其删除(如果未替换)带有char +“-”的char。

就像计算器的-/ +按钮一样。

例子:

"" -> "-"
"-" -> ""
"abc2-3" -> "abc23"
"a2-" -> "a2"
"s23.3" -> "s-23.3"
"4f" -> "4f-"


是的,我已经看到了:JavaScript RegExp: Can I get the last matched index or search backwards/RightToLeft?,但是我无法使它用于括号中的字符

最佳答案

plusMinus(''); //'-'
plusMinus('-'); //''
plusMinus('abc2-3'); //'abc23'
plusMinus('a2-'); //'a2'
plusMinus('s23.3'); //s-23.3

function plusMinus(str) {
    return str.replace(/(^|[^\d\.])(?=[\d\.]*$)/, function ($0) {
        return $0 === '-'? '' : $0 + '-';
    });
}


我只是不确定如何处理33之类的东西,因为现在它将返回-33。这是期望的行为吗?

09-20 14:47