关于利用正则表达式消除不必要的空格及数字中多余的零的问题!!

paullbm 2009-05-05 02:10:39
加精
wcwtitxu大哥,在贴子
http://topic.csdn.net/u/20090430/15/8562e58c-99ae-41fe-b6e7-cb1bd6a867ae.html
中,你在24楼提到了关于消除不必要的空格及数字中多余的零的问题!!
但经我测试发现,有一定的BUG(比如在数值和右括号之间的空格仍然无法消除)!

为了更好说明上述问题,我已经找到了相关规律,但在实现上也出现了一些问题,现将示例如下:

1).假设有一个字符串:
" astring( ( 10 20 ) , (20 15) , (20 15 ) )"
经处理后能够得到:
"astring((10 20),(20 15),(20 15))"

2).另一字符串:
" bstring( ( 10 10, 10 20, 20 20, 20 15, 10 10) , (20 15, 5

5, 10 10, 20 15) ) "
经处理后能够得到:
"bstring((10 10,10 20,20 20,20 15,10 10),(20 15,5 5,10 10,20 15))"

3).再有一字符串:
" cstring( ( 10 10 ,20 15 ) ,( 10 10 ,20 15 ,5 7) ) "
经处理后能够得到:
"cstring((10 10,20 15),(10 10,20 15 ,5 7))"


规律如下:
(1).坐标对(已做部分紫色标记)之间任意个空格经处理之后,只有一个空格;
(2).除1的情况外,其余所有空格(或者说空白)字符都需消除!!


虽然我能以(\d+\s*\d+)的形式捕捉到一个坐标对及间空格

,但发现利用replace函数却无法替换成我想替换的格式!!!


PS:各位大哥也可不必理会此贴中标明的另一个超链接,从而直接针对本贴问题进行解答.
...全文
1124 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmggggmm 2009-11-11
  • 打赏
  • 举报
回复
正在学javascript,正则确实挺麻烦的
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 paullbm 的回复:]
引用 8 楼 chinmo 的回复:
直接2楼的那样不就可以都把你这些情况的空格都去掉了吗?



去除不了字符串开头的空格!!!!!
[/Quote]
晕,去掉了啊
我都测试过了
PleaseDoTellMeWhy 2009-05-07
  • 打赏
  • 举报
回复
都是强人
renzaijiang 2009-05-07
  • 打赏
  • 举报
回复
正则超级麻烦的
paullbm 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chinmo 的回复:]
直接2楼的那样不就可以都把你这些情况的空格都去掉了吗?
[/Quote]


去除不了字符串开头的空格!!!!!
wsczq1234 2009-05-07
  • 打赏
  • 举报
回复
学习下
wcwtitxu 2009-05-06
  • 打赏
  • 举报
回复

str = str.replace(/^\s*|\s*$|\s*([)(,\s])\s*/g, "$1");
SimonYeung 2009-05-06
  • 打赏
  • 举报
回复
不错 MARK
jiyan1221 2009-05-06
  • 打赏
  • 举报
回复
学习一下,帮顶~
xiamenjiang 2009-05-06
  • 打赏
  • 举报
回复
不错,学习了,都是高手。
  • 打赏
  • 举报
回复
呵呵,谢谢 wcwtitxu 的提醒 ^_^
lysnoopy 2009-05-06
  • 打赏
  • 举报
回复
严重的不懂,唉~~我太烂了
jie_90 2009-05-06
  • 打赏
  • 举报
回复
学习下
wackyboy 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chinmo 的回复:]
直接2楼的那样不就可以都把你这些情况的空格都去掉了吗?
[/Quote]

2楼的很强大
  • 打赏
  • 举报
回复
<script>
var re=/\s*([)(,\s])\s*/g;
var str1=" astring( ( 10 20 ) , (20 15) , (20 15 ) )"
var str2=" bstring( ( 10 10, 10 20, 20 20, 20 15, 10 10) , (20 15, 5 5, 10 10, 20 15) ) "
var str3=" cstring( ( 10 10 ,20 15 ) ,( 10 10 ,20 15 ,5 7) ) "
document.write(str1.replace(re, "$1")+"测试还有空格没")
document.write("<br>")
document.write(str2.replace(re, "$1")+"测试还有空格没")
document.write("<br>")
document.write(str3.replace(re, "$1")+"测试还有空格没")
</script>
wcwtitxu 2009-05-06
  • 打赏
  • 举报
回复
错了
是 "第二个数"
  • 打赏
  • 举报
回复
直接2楼的那样不就可以都把你这些情况的空格都去掉了吗?
wcwtitxu 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 bao110908 的回复:]
var s = ' astring( ( 10 20 ) , (20\n 15) , (20 15 ) )';

为了避免像上面这种数字后面直接是个换行符之类的情况出现,再改一下代码:


HTML code<script type="text/javascript">
window.onload = function() {
var strs = [
' astring( ( 10 20 ) , (20\n 15) , (20 15 ) )',
'bstring( ( 10 10, 10 20, 20 20, 20 15, 10 10) , (20 15, 5 \n 5, 10 10, 20 15) ) ',

[/Quote]

好哇!

第一个数开头可能是负数
(\d\s)\s*(?=[\d\-])|\s+
paullbm 2009-05-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wcwtitxu 的回复:]
// 下面这样子应该也可以了吧
(1)
var regex = /^\s+|\s*([)(,\s]|$)\s*/g;
str = str.replace(regex, "$1");
[/Quote]

(2)
str = str.replace(/\s*([(, )]|^|$)\s*/g, "$1"); // 去掉无所谓的空格


将第2种的改为如下:
str = str.replace(/\s*([(, )]|$)\s*/g, "$1"); // 去掉无所谓的空格
是否比第1种考虑还更简单些呢?
licip 2009-05-06
  • 打赏
  • 举报
回复
不错,学习了,都是高手。
加载更多回复(12)

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧