簡體   English   中英

正則表達式 RegEx - 多行/連接/修剪

[英]Regular Expression RegEx - Multiline / Concatenate / Trim

我有這樣一段文字:

abc
_def
ghi_
_efg_

!!! 重要提示:在我的示例中,' _ ' 表示空格或不可見字符

我想要一個代碼,它給我以下結果:

abc;def
ghi;efg

意思是:

  1. 刪除每一行的前導和尾隨空格
  2. 用分號連接所有行;
  3. 創建一個包含 2 個記錄的包(在我的實際情況下是 250 個)

到目前為止,我有以下代碼:

var dataList = document.getElementById("dataList").value;  // read text area
var dataList_arr_packaged = dataList.match(/(?=[\s\S])(?:.*\n?){1,2}/g);  // create a package of 2 records 

for (i =0; i<dataList_arr_packaged.length; i++) {
        var currValues = dataList_arr_packaged[i].replace(/\r?\n|\r/g, ";");    // concatenate within 1 package all records with a ;         
}

但是我上面的代碼給了我結果

abc;_def
ghi_;_efg_

(再次 '_' 表示空格):

我怎樣才能像上面描述的那樣拆分,同時刪除空格(=修剪)?

非常感謝,卡萊姆

我會用split() / reduce()組合來解決這個問題。

 let data = `abc def ghi efg ` let output = data.split("\\n").reduce((b, a, i) => { if (i % 2 === 0) b.push(a.trim()); else b[b.length - 1] += ";" + a.trim(); return b }, []) console.log(output)

使用.replace(/\\s*(.+?)\\s*/, '$1')進行空間修剪。

您可以使用模式首先匹配 2 行,其中第一行以非空白字符開頭。

然后匹配以非空白字符以外的可選字符和至少一個非空白字符開頭的第二行。

^\S.*\r?\n[^\S\r\n]*\S.*
  • ^字符串開始
  • \\S.*匹配一個非空白字符和該行的其余部分
  • \\r?\\n匹配換行符
  • [^\\S\\r\\n]*匹配除空格以外的可選前導字符
  • \\S.*匹配單個非空白字符和 0+ 次除換行符以外的任何字符

正則表達式演示

然后在替換中,首先修剪匹配以去除前導和尾隨空格,並將所有空白字符替換為;

 const regex = /^\\S.*\\r?\\n[^\\S\\r\\n]*\\S.*/gm; let dataList = `abc def ghi efg ` const result = dataList.replace(regex, m => m.trim().replace(/\\s+/g, ';')); console.log(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM