javascript split函数使用正则表达式和字符串的不同

时间:2023-01-29 18:50:23
var str = "HTTP/1.0,,HTTP/1.1,,";
var strArray = str.split(",");
alert(strArray.length); // ---> 5
var strArray2 = str.split(/,/);
alert(strArray2.length); // ---> 2

如何解释? 正则表达式不保留空值吗? 为什么不保留呢

9 个解决方案

#1


var strArray2 = str.split(/,/g); 
加个g

#2



这个问题目前我的感觉,只能归结于IE和FF解析引擎不一样..没找到相关说明 只能先记住测试结果了..

#3


引用 1 楼 wtcsy 的回复:
var strArray2 = str.split(/,/g);
 加个g

/,/g : 匹配多次,所以能匹配到多个,进行切分
/,/  : 匹配一次,所以匹配到第一个,切分完事

#4



TO #3
我认为这个问题不应该这么理解..split()只是以一个字符串做为分割符 进行分割
所以/,/已经是,字符串了 与g无关..
而且测试下可以发现IE ,FF 解析结果是不一样的
<script type="text/javascript">
<!--
var str = "a,,b,,";
alert(str.split(',')); // IE: a,,b,, FF: a,,b,,
alert(str.split(/,/)); // IE: a,b    FF: a,,b,,
//-->
</script>

#5



刚才在as下也试了下,结果和FF一致的,那就是IE自作聪明的//掐头去尾了...所以首选split(",")

#6


应该是MS的JScript实现不一样吧

#7


嗯,确实是ie/ff的差别.
关键是这个的差别.
alert(str.split(/,/));

这种情况下,ie/ff都按字符,(逗号)切分,不论是否有修正符g,都切分所有.
但是ie切分后的获得的数组自动把空值移除,而ff保留空值元素.

#8


这个问题与http://bbs.51js.com/viewthread.php?tid=84771&page=1有点点类似。

#9


如果是g的问题, 我就不会发这个贴了呵呵
只能姑且认为IE就是不保留空值了呵呵
谢谢各位呵呵

#1


var strArray2 = str.split(/,/g); 
加个g

#2



这个问题目前我的感觉,只能归结于IE和FF解析引擎不一样..没找到相关说明 只能先记住测试结果了..

#3


引用 1 楼 wtcsy 的回复:
var strArray2 = str.split(/,/g);
 加个g

/,/g : 匹配多次,所以能匹配到多个,进行切分
/,/  : 匹配一次,所以匹配到第一个,切分完事

#4



TO #3
我认为这个问题不应该这么理解..split()只是以一个字符串做为分割符 进行分割
所以/,/已经是,字符串了 与g无关..
而且测试下可以发现IE ,FF 解析结果是不一样的
<script type="text/javascript">
<!--
var str = "a,,b,,";
alert(str.split(',')); // IE: a,,b,, FF: a,,b,,
alert(str.split(/,/)); // IE: a,b    FF: a,,b,,
//-->
</script>

#5



刚才在as下也试了下,结果和FF一致的,那就是IE自作聪明的//掐头去尾了...所以首选split(",")

#6


应该是MS的JScript实现不一样吧

#7


嗯,确实是ie/ff的差别.
关键是这个的差别.
alert(str.split(/,/));

这种情况下,ie/ff都按字符,(逗号)切分,不论是否有修正符g,都切分所有.
但是ie切分后的获得的数组自动把空值移除,而ff保留空值元素.

#8


这个问题与http://bbs.51js.com/viewthread.php?tid=84771&page=1有点点类似。

#9


如果是g的问题, 我就不会发这个贴了呵呵
只能姑且认为IE就是不保留空值了呵呵
谢谢各位呵呵