JavaScript拆分字符串时产生空字符的解决方案(2)

我在代码中发现,在填充数组的时候会调用%_SubString这个方法来截取字符串,可惜的是我没有找到他的相关定义,如果有找到的同学欢迎告知。但是,我发现JavaScript中substring这个方法所对应的StringSubstring这个方法会调用%_SubString这个方法,并将其结果返回。那么如果'abc'.substring(1,1)返回"",则表明%_SubString这个方法在开始位置和结束位置相同的时候会返回"",结果大家一试便知。

那么,什么时候会出现开始位置等于结束位置(即q === p)的情况呢?我按照上面的步骤一步一步的进行分析,最终发现:
 •当原始字符串S匹配过一次分隔符之后,紧接着,字符串S的下一个位置还匹配分隔符。如:'abbbc'.split('b'),'abbbc'.split(/(b){1}/)
 •另一种情况是字符串开头的一个或几个字符匹配分隔符。如:'abc'.split('a'),'abc'.split(/ab/)
•还有一种情况是字符串结尾的一个或几个字符串匹配分隔符,与之相关的步骤是第14步。
 如:'abc'.split('c'),'abc'.split(/bc/)

此外,当使用正则表达式作为分隔符的时候,返回的结果中还有可能出现undefined。
 如:'abc'.split(/(d)*/)

回过头来再看看开头的那个例子,是不是满足上面几种情况?

题外话

这是我第一次这么仔细的看ECMAScript的标准规范,看的过程确实很痛苦,但明白之后就感觉很痛快了。也感谢题主提出的这个问题,以及追问。
 顺便提一句,正则表达式作为分隔符时,global修饰符g是会被忽略的,这也算是一次额外的收获。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjxwss.html