分解字符串時出現問題。使用正則表達式分解帶括號的字符串
問題:
我想分解的字符串是這樣的:
(01)123456789(11)060606(17)121212(21)1321asdfght(10)aaabbb
,並返回一個像這樣的對象:
Object {
identifier01: "123456789",
identifier11: "060606",
identifier17: "121212",
identifier21: "1321asdfght",
identifier10: "aaabbb"
}
規則:
identifier01有總是14個數字字符
identifier11始終6個數字字符
identifier17始終6個數字字符
identifier21始終爲1至20個字母數字字符
identifier10始終爲1至20個字母數字字符
的問題是identifier21和identifier10沒有固定的字符長度(從1到20個字符不等)。更重要的是,只有identifier01總是在開頭的標識符和其餘的可以有不同的順序,讓我們說:
(01)123456789(21)111122233344(10)abcdeed(11)050505(17)060606
,甚至是特定的標識符可以根本不存在:
(01)123456789(21)111122233344(17)060606
我的方法:
parseStringToAnObject: function (value) {
var regs = [
["(01) ", /\([^)]*01\)([0-9]{14})/],
["(10) ", /\([^)]*10\)([0-9a-zA-Z]{1,20})/],
["(11) ", /\([^)]*11\)([0-9]{6})/],
["(17) ", /\([^)]*17\)([0-9]{6})/],
["(21) ", /\([^)]*21\)([0-9a-zA-Z]{1,20})/]
];
var tempObj = {};
while (value.length > 0) {
var ok = false;
for (var i = 0; i < regs.length; i++) {
var match = value.match(regs[i][1]);
console.log(match);
if (match) {
ok = true;
switch (match[0].slice(0, 4)) {
case "(01)":
tempObj.identifier01 = match[1];
break;
case "(21)":
tempObj.identifier21 = match[1];
break;
case "(11)":
tempObj.identifier11 = match[1];
break;
case "(17)":
tempObj.identifier17 = match[1];
break;
case "(10)":
tempObj.identifier10 = match[1];
break;
}
value = value.slice(match[0].length);
break;
} else {
console.log("Regex error");
}
}
if (!ok) {
return false;
}
}
console.log(tempObj);
return tempObj;
}
結果:
我的函數返回一個適當的數據,但只有當我不鍵入可變數量的字符的標識符。當我輸入例如
(01)123456789(21)abder123(17)121212
或
(01)123456789(10)123aaaaabbbddd(21)qwerty
或
(01)123456789(17)060606(10)aabbcc121212(11)030303
它總是返回我假。
您能否提出一個更好更精細的方法?
感謝您提前給出所有答案和解決方案!