如何在javascript中拆分字符串?

时间:2017-05-25 07:17:22

标签: javascript

我有一个文本文件,其中包含日期和相​​应事件的列表,如下所示,

txt:
2017-05-01: All Day Event:
2017-05-06: Day Event:
2017-05-15: abc Event:
2017-06-05: All Event:
2017-06-03: Al Event:

首先,我使用简单的拆分功能来拆分文本文件的内容

var text=xmlhttp.responseText;
var amber=text.split(':');

在琥珀色数组中,每个日期和事件都同时存储,我需要做的是单独访问日期并分割日,月和年,我尝试使用以下代码

var stwo="";

for (var i = 0; i < amber.length; i += 2) {
  stwo = amber[i].split('-');
}

但是当我尝试访问stwo []的内容时,它显示“未定义”,我也试过像这样声明stwo

 stwo=[" "," "];

因为我认为stwo没有定义为数组,我做错了什么?还有其他方法可以分割日期吗?

这是我的完整代码。

   <!DOCTYPE HTML>
   <html>
   <head>
   <meta http-equiv="X-UA-Compatible" content="IE=edge" />
   <meta http-equiv='Content-Type' content='text/html;charset=UTF-8' />
    <title>SAPUI5 EVENT CALENDAR</title>
    <script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
    id="sap-ui-bootstrap" data-sap-ui-libs="sap.m,sap.ui.layout,sap.me"
    data-sap-ui-xx-bindingSyntax="complex"
    data-sap-ui-theme="sap_bluecrystal"></script>

    <script>


    jQuery.sap.require("sap.me.Calendar");
    jQuery.sap.require("sap.m.RadioButton");
    calendar = new sap.me.Calendar({

    firstDayOffset : 1

     });

    var xmlhttp,text;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open('GET','C:/Users/Manimaran/Desktop/project/nn.txt',false);
    xmlhttp.send();
    var text=xmlhttp.responseText;
    var amber=text.split(':');


    for (var t = 0; t < amber.length; t+=2) 
    {
     calendar.toggleDatesType([amber[t]],sap.me.CalendarEventType.Type07, 
     true);
    //document.write(a[i+1]+"<br>");
     }

     calendar.toggleDatesType([ "2017/05/15" ], 
     sap.me.CalendarEventType.Type07,
        true);

    var msgLabel = new sap.m.Label({
    width : "100%"
   });
    calendar.attachTapOnDate(function(oEvent) {

    /* date=oEvent.getParameters().date;
     msgLabel.setText(date)*/
   });
   calendar.attachChangeCurrentDate(function(oEvent) {


    var stwo=[" "," "];

    for (var i=0;i<amber.length;i+=2)
        {
        stwo=amber[i].split('-');
        }

    /*for (var j=1;j<stwo.length;j+=3)
        {

        switch(stwo[j]){
        case '01' : stwo[j]="Jan"; 
        break;
        case '02' : stwo[j]="Feb"; 
        break;
        case '03' : stwo[j]="Mar"; 
            break;
        case '04' : stwo[j]="Apr"; 
            break;
        case '05' : stwo[j]="May"; 
            break;
        case '06' : stwo[j]="Jun"; 
            break;
        case '07' : stwo[j]="Jul"; 
            break;
        case '08' : stwo[j]="Aug"; 
            break;
        case '09' : stwo[j]="Sep"; 
            break;
        case '10' : stwo[j]="Oct"; 
            break;
        case '11' : stwo[j]="Nov"; 
            break;
        case '12' : stwo[j]="Dec"; 
            break;
        default:"gokka makka";  
            }
        }*/
        var comp=oEvent.getParameters().currentDate;
        var tmp=comp.split(' ');
        if(tmp[1]==tmp[1]){
            msgLabel.setText(stwo);     
                alert(stwo[1]);
        }else{
            alert('error');

        }


        });

var unselectBtn = new sap.m.Button({
    text : "unselect all",
    press : function() {
        var aDates = calendar.getSelectedDates();
        calendar.unselectAllDates();
        msgLabel.setText("unselected " + aDates.length + " dates");
        alert(text);
    }
});


var app = new sap.m.App();
var page = new sap.m.Page({
    headerContent : unselectBtn,
    content : [ calendar, new sap.m.Label({
        width : "100%",
        text : "Messages log"
    }), msgLabel]
});

// Colgate: weeks start on sunday, and show 2 months
calendar.setSingleRow(false);
calendar.setMonthsToDisplay(1);
//  calendar.setWeeksPerRow(1);
calendar.setMonthsPerRow(1);
calendar.setFirstDayOffset(0);
app.addPage(page);
app.placeAt('content');


</script>
</head>
<body class='sapUiBody'>
<div id='content'></div>
<p id="display"></p>
</body>
</html>

3 个答案:

答案 0 :(得分:0)

您可以像这样解析每个日志行:

// ES6
const txt = `
2017-05-01: All Day Event:
2017-05-06: Day Event:
2017-05-15: abc Event:
2017-06-05: All Event:
2017-06-03: Al Event:
`
const amber = txt.trim().split('\n');
const logDates = amber.map(line => line.split(':')[0]);
const logDatesSplitted = logDates.map(logDate => logDate.split('-'));

console.log(logDatesSplitted);

// ES5: Fast Splitting by colon
var amber_ = txt.trim().split(':');
var logDates_ = [];

for(var i = 0; i < amber_.length; i += 2) {
  if(amber_[i] == "") continue; // filter out last empty log record;
  var logDate = amber_[i].trim().split('-');
  logDates_.push(logDate);
}
console.log(logDates_);

答案 1 :(得分:0)

您每次只是将值分配给stwo 因此,最后一个之前的所有分割值都将丢失 split(':')中的最后一个字符串也是空的,因为在最后:之后,在给定字符串中没有任何内容。
所以最后不会将任何内容分配给stwo

检查此代码段

&#13;
&#13;
var text = "2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:";
var amber = text.split(':');
var stwo;
console.log(amber);
for (var i = 0; i < amber.length; i += 2) {
  if (amber[i] != "") {
    stwo = amber[i].split('-');
  }
}

console.log(stwo);
&#13;
&#13;
&#13;

如果你看到,即使检查空字符串,也只会将最后一个日期拆分并添加到变量stwo

要存储每个分割值,您可以在Array(MultiDimesional数组)中使用Array

&#13;
&#13;
var text = "2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:";
var amber = text.split(':');
var stwo = new Array();
console.log(amber);
var j = 0;
for (var i = 0; i < amber.length; i += 2) {
  if (amber[i] != "" && amber[i].indexOf('-') > 1) {
    stwo[j] = amber[i].split('-');
    j++;
  }
}

console.log(stwo);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

结帐

var test = '2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:';
test = test.replace(/:+$/g,"");
var test1 = test.split(':');

var test2 = [];

for (var i = 0; i < test1.length; i += 2) {
  test2.push(test1[i].split('-'));
  //console.log(test2);
}

console.log(test2);