@
jakwings 回来回味了一下楼主的题目,发现我还是理解错了?
最前面有负号则转换出负数,前方(负号后)*任意位置*有点就加上小数点并忽略后面任意位置的点,若前方没有点而后方(数字之前)*任意位置*有点则在后方加上小数点。好吧,我再更正一下转换语句:
str.replace(/^\.*(-)?(?:-*(\.)[.\-]*(\d+)(?:[.\-]*(\d+))?|[.\-]*(\d+)(?:-*(\.)?[.\-]*(\d+))?)[.\-]*$/, '$1$2$3$4$5$6$7');
详细解释如下(非 [] 中的空格请忽略):
@^
\.*(-)? #检测开头的负号,并且忽略负号前的点
(?: #进入多种模式匹配
-*(\.)[.\-]* #找到(负号后的)点
(\d+)(?:[.\-]*(\d+))? #找到小数点后的数字,并忽略其后的点
| #第二个模式开始
[.\-]*(\d+) #找到(小数点前的)数字
(?:-*(\.)?[.\-]*(\d+))? #找到(小数点及其后的)其余数字
) #匹配模式结束
[.\-]* #忽略其后所有无意义字串
@$
当然,我不知道会不会出现这样的字串「3---5」,上面会将其转换为「35」。