下面的代碼給出了最終的未定義部分……試圖找出未定義部分的創建位置。有什么想法嗎?
jQuery(document).ready(function() {
console.log("ok");
var object = {};
var text = `#DATA1 1000
#DATA2 1000
#DATA3 2000
#DIM 1 "test"
#DIM 6 "test2"`;
var lines = text.split('\n');
for (var line = 0; line < lines.length; line ) {
//console.log(lines[line]);
if (lines[line].startsWith("#DIM")) {
//console.log(lines[line]);
var myRegexp = /[^\s"] |"([^"]*)"/gi;
var row = [];
do {
//Each call to exec returns the next regex match as an array
var match = myRegexp.exec(lines[line]);
if (match != null) {
//console.log(match);
row.push(match[1] ? match[1] : match[0]);
object[row[1]] = {
namn: row[2]
};
}
//console.log(row);
} while (match != null);
}
}
console.log(object);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
這是一個小提琴。
uj5u.com熱心網友回復:
問題是,在您的第一次通過時,row其中只有一個元素 ( row[0]),因此row[1]和row[2]都是undefined。
我覺得這段代碼的目標是建立一個物件從派生屬性#DIM 1 "test"和#DIM 6 "test"2線條,賦予屬性的名稱"1","2"等用引號的文本值。如果是這樣,您根本不需要row,請參閱評論:
const text = `#DATA1 1000
#DATA2 1000
#DATA3 2000
#DIM 1 "test"
#DIM 6 "test2"`;
const object = {};
// Use multiline flag so `^` matches start-of-line and
// $ matches end-of-line
const rexParseLine = /^#DIM\s (\S )\s "([^"] )"\s*$/gm;
let match;
while ((match = rexParseLine.exec(text)) !== null) {
object[match[1]] = match[2];
}
console.log(object);
請注意,我沒有先將文本拆分成行,如果我們使用多行 ( m) 標志,正則運算式可以處理行內的作業。這是正則運算式的細分:
^#DIM- 行開始于#DIM\s- 后跟一個或多個空格字符(\S )- 后跟我們捕獲的一個或多個非空白字符\s- 后跟一個或多個空格字符"([^"] )"- 后跟"我們捕獲的中間帶有文本的s\s*$- 后跟可選的空格和行尾
該g標志讓我們在回圈中使用它來處理文本,并且該m標志再次改變了^和的含義$。
旁注:在現代環境中,我們可以使用命名捕獲組來更清楚地說明:
顯示代碼片段
const text = `#DATA1 1000
#DATA2 1000
#DATA3 2000
#DIM 1 "test"
#DIM 6 "test2"`;
const object = {};
// Use multiline flag so `^` matches start-of-line and
// $ matches end-of-line
const rexParseLine = /^#DIM\s (?<key>\S )\s "(?<value>[^"] )"\s*$/gm;
let match;
while ((match = rexParseLine.exec(text)) !== null) {
const {key, value} = match.groups;
object[key] = value;
}
console.log(object);
但我必須承認,我不清楚您為什么允許第一個捕獲組為空,因此可能需要進行調整。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348609.html
標籤:查询
