我有引數將由用戶傳遞給命令。命令的每個引數都將用空格分隔,這將代表一個新引數。示例:"arg1 arg2 arg3"轉換為["arg1", "arg2", "arg3"]輸出為 JS 陣列的位置。這可以通過一個簡單的.split(" ").
但是,當嘗試將陣列格式化為命令引數時,我的問題就開始了。我的目標是允許用戶以陣列的格式輸入 agument(例如,開頭[可能包含由 a 分隔,并以 a 結尾的多個元素]),例如:"arg1 [elem1, elem2] arg3"轉換為["arg1", ["elem1", "elem2"], "arg3"]內部和外部陣列是 JS 陣列的位置。
我嘗試過使用 JSON.Parse() 但是,每個元素都需要用戶"在每個元素的開頭都有,這對用戶來說太復雜了,而且對于輸入來說不是必需的。此外,元素可能并不總是打算是 astring并且可能是 Boolean、Number 或自定義型別。
截至目前,這是我最好的解決方案,但缺少一些要求,并且當陣列內部有空間時也不起作用。
s.split(/[\[\]]|\s /).filter(arg => arg.length > 1);
我已經提出了一些其他解決方案,但在上面設定的所需規范中都缺少一件事或另一件事。可以處理嵌套陣列的解決方案會很好,但它不是必需的,并且可能使解決方案比它需要的復雜得多。
uj5u.com熱心網友回復:
讓我們假設沒有有趣的字符作為輸入。現在也允許嵌套。
var str = "arg1 [ elem1 , elem2,elem3 ] arg3";
console.log(str)
str = str.replace(/\s*,\s*/g, ',');
str = str.replace(/\[\s*/g, '[');
str = str.replace(/\s*\]/g, ']');
var arr = str.split(/\s /);
arr = arr.map(function(elem) {
return elem.charAt(0) == '[' ? elem.slice(1, -1).split(",") : elem;
})
console.log(arr)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497040.html
標籤:javascript 正则表达式 命令行参数
