电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> Javascript>>JavaScript之正则表达式 replace:

JavaScript之正则表达式 replace

来源:远方网络 | 2005-12-23 14:08:58 | (有3340人读过)


近来一直在研究 SVG,发现软件(如Illustrator)生成的SVG中的数据小数位数太多了,没必要如此精确,于是心想能否自动处理一下里面的数据,让所有的数都四舍五入精简一下,我头一个想到的就是我所熟悉的正则表达式,可我所接触到的javascript中的正则表达式(因为在html中就能执行,故没考虑在Perl或Java中使用)好像还没有能方便处理这种情况的方法,于是今天 google 了一下,但一开始也没看到自己想要的东西,但看到字符串replace方法的时候,心想javascript是不是存在 replace(rexp, function) 的用法,于是,用“javascript regular expression replace function”搜索了一下,果真发现了在mozilla网站上的 Core JavaScript 1.5 Reference 中提到了 replace(rexp, function) 的用法,看了例子后,稍微研究了一下,发现其中 function的参数是这样的:
arguments[0], 匹配的串源
arguments[1] ... arguments[arguments.length -3],匹配()内容,相当于常用的 $1, $2...
arguments[arguments.length -2],匹配串的位置偏移 offset
arguments[arguments.length -1],整个字符串源

对于SVG中的某自动生成的点数据,把数据赋值给变量 points:
var points="1.23456,2.34534 3.47804-4.824-5.270213,6.009324";
定义正则表达式
var rexp = /(\-?[0-9]+(\.([0-9]+))?)/g;
通过
points = points.replace(rexp, function(){
return Math.floor(parseFloat(arguments[1])*100 +0.5)/100;
});
最后得到的 points="1.23,2.35 3.48-4.82-5.27,6.01",正是我想要的效果。玩了好几年的JavaScript,其实也有碰到过类似的问题,竟然没发现 replace 的这个功能,真是遗憾。

(这里的例子取了两位小数,其实对于精度要求不是太高的SVG里,一位小数应该就足够了。)
Javascript热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号