所以这是我的代码:
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?但是我无法让它在括号
中为字符工作答案 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
。这是理想的行为吗?