javascript - js实现字符串切分数组
高洛峰
高洛峰 2017-04-10 15:42:22
[JavaScript讨论组]

有一个字符串var aString = '1 2 3 "3.1 3.2 3.3" 4 5';
现在要把字符串用空格分割成数组元素,但是""里面的不分割,组成[1,2,3,"3.1 3.2 3.3",4,5],这个怎么实现?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
巴扎黑

自己简单的写了下处理的方法。我的思路是:

  1. 先把字符串按照空格拆分为数组;

  2. 遍历数组,寻找数组中引号的开始和结束位置,把这中间的数据拼接为一个数据,存储到数组中;

  3. 非引号中间的数据,作为单独数据进行存储;

  4. 返回存储的数组。

function wsplit(str){
    var st = str.split(' '); // 先按照空格拆分为数组
    var start=-1;
    var result = [], // 存储结果
        item='';     // 存储双引号中间的数据

    for(var i=0, t=st.length; i<t; i++){
        // 处理双引号中间的数据
        if((st[i]+'').indexOf('"')>-1 || start>-1){
            // 如果正好是双引号所在的数据
            if( (st[i]+'').indexOf('"')>-1 ){
                if(start==-1){
                    item += st[i]+' ';
                    start = i;
                }else{
                    // 引号结束时,把item上拼接的数据压到result中
                    item += st[i]+'';
                    result.push(item);
                    item = '';
                    start = -1;
                }
            }else{
                // 引号中间的数据
                item += st[i]+' ';
            }
        }else{
            // 引号两边的数据直接压入到数组中
            result.push(st[i]+'');
        }
    }
    return result;
}
var aString = '1 "2 3" "3.1 3.2 3.3" 4 5';
console.log( wsplit(aString) ); // ['1', '"2 3"', '"3.1 3.2 3.3"', '4', '5']
天蓬老师

突然间让我涌起了想写一段正则表达式的豪情,^^

经@Zhuxy 提醒,修改代码如下:

var aString = '1 2 3 "3.1 3.2 3.3" 4 5 "6 7"';

var result = aString.match(/\"\S[^\"]*\"|\S/g)
    .map(function(str) {
        return str.replace(/\"/g, '');
    });

console.log(result); //[ '1', '2', '3', '3.1 3.2 3.3', '4', '5', '6 7' ]
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号