指定javascript字符串拆分大小

时间:2014-04-14 08:52:42

标签: javascript

我想用这样的split函数分隔这个文本。数组项应为3个字符。

var text = "abcdef";
var splitted = ["abc", "def"]

var text = "abcdefg";
var splitted = ["a", "bcd", "efg"]

var text = "abcdefgk";
var splitted = ["ab", "cde", "fgk"]

文字从上到下分割。

4 个答案:

答案 0 :(得分:1)

var size = 3; //specify the size here
var str = "abcdefgk" //the string you want to split

var i = str.length % 3; // modulo gets you the remaining part
var result = [str.substring(0,i)]; //create array with only first part

//for the rest, iterate over str and add chunks of length size
for(; i < str.length; i+=size){
    result.push(str.substring(i, i+size))

}
alert(result) //display the result

答案 1 :(得分:0)

正则表达式解决方案:

var text = "abcdefg";
var regex = text.length % 3 ? '^.{'+ (text.length % 3) +'}|.{3}' : '.{3}';
var result = text.match(new RegExp(regex, 'g'));
// ["a", "bcd", "efg"]

你也可以这样做:

var text = "abcdefg";
var result = [text.substr(0, text.length % 3)].concat(text.substr(text.length % 3).match(/.{3}/g));

提示在使用正则表达式时,请考虑使用.match而不是.split来获取结果。

答案 2 :(得分:0)

如果您想使用 递归 ,请尝试使用

<script type="text/javascript">
    function strSplit(str){
        var arr=[];
        dorecurSplit(str,str.length,arr,0);
        alert(arr);
    }
    function dorecurSplit(st,len,ar,x)
    {
        if(len<=0)
            return ar;
        else{
            var i=len%3;
            if(i==0)
                {
                    ar.push(st.substring(x,x+3));
                    dorecurSplit(st,len-3,ar,x+3);
                }
            else
                {
                    ar.push(st.substring(x,i));
                    dorecurSplit(st,len-i,ar,x+i);
                }
        }

    }
</script>

调用此

<button onclick="strSplit('abcdefghij')">Split it</button>

答案 3 :(得分:0)

对于所需的输出,我们需要使用子字符串,因为较小的部分是在开头而不是在结尾处。注意:我们不使用切片,因为切片中的负索引将再次从字符串中取出字符。所以,我们坚持使用子串来避免这种情况。

var str = "abcdefgh";
var len = str.length;
var res = [];

for(var i=len;i>0;i=i-3){
 res.push(str.substring(i-3,i));
}
//res array will contain the desired output now

但是,如果解析应该从头开始贪婪,即{3,3,2}而不是{2,3,3},那么使用正则表达式( / [a-zA-Z] {1, 3} / GI )为此,这更容易和更快。为此,我们不需要子串。     var str =&#34; abcdef&#34 ;;     var result = str.match(/ [a-zA-Z] {1,3} / gi); // [&#34; ABC&#34;&#34; DEF&#34;]

var str = "abcdefgh";
var result = str.match(/[a-zA-Z]{1,3}/gi); //["abc","def","gh"]

var str = "abcdefg";
var result = str.match(/[a-zA-Z]{1,3}/gi); //["abc","def","g"]