正则表达式 - 替换方法从字符串中删除运算符会产生不希望的结果

时间:2014-12-28 08:48:32

标签: javascript regex

我有一个字符串,我想要替换operator like (+, -, /, *),以便我能够分开表达式。



var exp = '9 + 3 - 7 / 4 * 6.56';

// current output 9 3 7 4 6 56
// desired result 9 3 7 4 6.56
document.body.innerHTML = exp.replace(/ /g,'').replace(/[+-\/\*]/g, ' ');




但是,replace()方法会返回不良结果。

3 个答案:

答案 0 :(得分:4)

-表示正则表达式中字符类中的范围。要么把它放在开头还是结尾,要么逃避它。

document.body.innerHTML = exp.replace(/ /g,'').replace(/[+\/*-]/g, ' ');

答案 1 :(得分:4)

您可以减少代码,

exp.replace(/\s*[-+\/*]\s*/g, ' ');

在某些情况下,字符类中间的未转义连字符-将像范围运算符一样。所以你需要转义连字符,或者你需要把它放在字符类的开头或结尾。

示例:

> var exp = '9 + 3 - 7 / 4 * 6.56';
> exp.replace(/\s*[-+\/*]\s*/g, ' ');
'9 3 7 4 6.56'

如果输入包含负数,我认为它需要以下格式。

> var exp = '-9 + 3 - 7 / 4 * -6.56';
undefined
> exp.replace(/\s+[-+\/*]\s+/g, ' ');
'-9 3 7 4 -6.56'

答案 2 :(得分:1)

基于数字之间的运算符进行拆分,以便考虑负数

(?!=\d) [-+*/] (?=\d|-)

DEMO

它使用Look Around来查看操作符后面的数字。

它适用于负数,例如-9 + 3 - 7 / 4 * 6.56

Find more...