读书人

关于利用正则表达式消除不必要的空格及

发布时间: 2012-03-03 15:33:03 作者: rapoo

关于利用正则表达式消除不必要的空格及数字中多余的零的问题!!
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:各位大哥也可不必理会此贴中标明的另一个超链接,从而直接针对本贴问题进行解答.


[解决办法]

JScript code
str = str.replace(/^\s*|\s*$|\s*([)(,\s])\s*/g, "$1");
[解决办法]
JScript code
str = str.replace(/\s*([)(,\s])\s*/g, "$1");
[解决办法]
JScript code
/*原来这样子   \s*?([(,)\s]|^|$)\s*昨晚测试时 发现不但不能去掉 数值和右括号之间的空格字符串首尾的空格也没有剃光,还留有一个.  虽然中间有 ^ 跟 $,  但这两个并没有起作用 捕获组1 总是匹配到一个空格像:*/var str = "        abc        ";str = str.replace(/\s*?([(,)\s]|^|$)\s*/g, "$1");// 然后  str==" abc ";  前后还有一个空格/*所以我昨晚 把前面的\s*?换成贪婪模式后,把 \s*([(,)\s])\s* 跟 ^\s* 和 \s*$三部分用 | 写成分支形式  就是一楼的那个样子了*/// 下面这样子应该也可以了吧var regex = /^\s+|\s*([)(,\s]|$)\s*/g;str = str.replace(regex, "$1");
[解决办法]
不错,学习了,都是高手。
[解决办法]
JScript code
<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>
[解决办法]
探讨
直接2楼的那样不就可以都把你这些情况的空格都去掉了吗?

[解决办法]
不错,学习了,都是高手。
[解决办法]
学习一下,帮顶~
[解决办法]
不错 MARK
[解决办法]
2楼的测试正确啊
[解决办法]
学习
[解决办法]
学习
[解决办法]
学习
------解决方案--------------------


JScript code
<script type="text/javascript">window.onload = function() {  var strs = [    '  astring( ( 10  20  ) ,  (20    15)  ,  (20  15 )  )',    'bstring( ( 10  10, 10  20, 20    20, 20  15, 10  10) ,  (20 15, 5  \n 5, 10  10, 20 15) ) ',    '  cstring(  (    10 10  ,20 15 )  ,( 10 10  ,20  15 ,5    7) ) '  ];  for(var i = 0; i < strs.length; i++) {    strs[i] = strs[i].replace(/([0-9]\s)\s*(?=[0-9])|\s+/g, '$1');    alert('|' + strs[i] + '|');  }}</script>
[解决办法]
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) ) ',    '  cstring(  (    10 10  ,20 15 )  ,( 10 10  ,20  15 ,5    7) ) '  ];  for(var i = 0; i < strs.length; i++) {    strs[i] = strs[i].replace(/([0-9])\s+(?=[0-9])|\s+/g, function(a, b) {          return b ? (b + ' ') : '';        });    alert('|' + strs[i] + '|');  }}</script> 

读书人网 >JavaScript

热点推荐