2016-08-03 19 views
1

我正在使用AngularJS中的單頁應用程序。Excel到Javascript - 忽略從Excel複製的列中的新行字符

有一個文本區域,用戶可以從Excel中粘貼一些行。所有行將具有相同的列數。我需要處理這個粘貼的數據並將其轉換爲一個javascript數組。這不是問題,因爲我可以\ r \ n或\ n或\ r分割字符串,\ t分割字段。

如果在其中一列中存在換行符,則會出現此問題。但在這種情況下,列由引號(「)括起來。

我明白,正則表達式可以幫助在這裏。不過,我在努力構建一個正則表達式忽略加上引號,新行字符。

//PastedItemData will have the following data 
1PS133-0FGD61**\t**"Text with**\r\n**multiple**\r\n**lines"**\t**1**\t**5932.2**\r\n**2PS133-0FGD61**\t**"Simple text with no new lines"**\t**2**\t**1234.5 

var PastedItemDataArray = PastedItemData.split("\r\n"); ///use regex here? 

我相信其他人可能面臨忽視了數據的新線的一個類似的問題。或許有可能比使用正則表達式的方式不同。有沒有人任何想法?

感謝。

+0

[新線拆分Java的String]的可能的複製(http://stackoverflow.com/questions/454908/split-java-string-by-new-line) –

+0

@ Mr.7 ..那麼,這裏沒有'Java'。 – developer033

回答

0

我不能用正則表達式來做這個代碼可以工作。

var PastedItemData = '1PS133-0FGD61**\t**"Text with**\r\n**multiple**\r\n**lines"**\t**1**\t**5932.2**\r\n**2PS133-0FGD61**\t**"Simple text with no new lines"**\t**2**\t**1234.5'; 
var i,c,ignore,cr,nl; 
var rows,row,str; 
ignore = false; 
str = ""; 
rows = []; 
row = []; 
for (i = 0; i < PastedItemData.length; i++) { 
    c = PastedItemData[i]; 
    if (ignore === true && c !== '"') { 
     str += c; 
    } else { 
     switch (c) { 
      case '"': 
       ignore = !ignore; 
       str += c; 
       cr = false; 
       break; 
      case "\r": 
       cr = true; 
       break; 
      case "\n": 
       if (cr === true) { 
        row.push(str); 
        rows.push(row); 
        row = []; 
        str = ""; 
        c = ""; 
        cr = false; 
       } 
       break; 
      case "\t": 
       row.push(str); 
       str = ""; 
       cr = false; 
       break; 
      default: 
       str += c; 
       cr = false; 
       break; 
     } 
    } 
} 
row.push(str); 
rows.push(row); 
console.log(rows); 
+0

是的。這樣可行。但是,如果在其中一列中有\ r \ n,它將會失敗。我試圖找到一種方法來忽略該特定\ r \ n或\ r或\ n。說如果第二列有「文本\ r \ n多\ r \ n行」 – Vikram

+0

嗨,它的工作。但僅適用於單行發生的新行字符。我認爲它只會忽略引號內新行的最後一次出現。 – Vikram

+0

感謝您的幫助。如果您確實遇到了將其擴展爲忽略引號內出現多行新行的方式,請告訴我。這將有很大的幫助。我正在嘗試下面的正則表達式鏈接:(http://regexr.com/3dut6) – Vikram