Javascript - RegExp - 替换最后一次出现的非数字

时间:2014-10-21 13:30:35

标签: javascript regex

所以这是我的代码:

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?但是我无法让它在括号

中为字符工作

2 个答案:

答案 0 :(得分:2)

我会这样说:

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

这将找到一个字符,使其后面的所有字符都是数字或点。由于量词的贪婪性和正则表达式的从左到右处理,这将是第一个找到的这样的字符,它将是最后一个非数字的非点字符。

但是,请务必return或以其他方式对结果做些什么!否则你只是丢弃它。

答案 1 :(得分:1)

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。这是理想的行为吗?