Javascript 使用正则表达式分解带括号的字符串
我在分解字符串时遇到问题 问题是: 我想像这样分解字符串:Javascript 使用正则表达式分解带括号的字符串,javascript,regex,string,Javascript,Regex,String,我在分解字符串时遇到问题 问题是: 我想像这样分解字符串: (01)1234567890134(11)060606(17)121212(21)1321asdfght(10)aaabbb 并返回如下所示的对象: Object { identifier01: "12345678901234", identifier11: "060606", identifier17: "121212", identifier21: "1321asdfgh
(01)1234567890134(11)060606(17)121212(21)1321asdfght(10)aaabbb
并返回如下所示的对象:
Object {
identifier01: "12345678901234",
identifier11: "060606",
identifier17: "121212",
identifier21: "1321asdfght",
identifier10: "aaabbb"
}
规则:identifier01始终包含14个数字字符
标识符11始终有6个数字字符
标识符17始终有6个数字字符
identifier21始终包含1到20个字母数字字符
identifier10始终包含1到20个字母数字字符 问题在于identifier21和identifier10没有固定长度的字符(从1到20个字符不等)。更重要的是,只有identifier01始终位于开头,其余标识符可以有不同的顺序,比如:
(01)1234567890134(21)111122233344(10)abcdeed(11)050505(17)060606
或者甚至一个特定的标识符根本不存在:
(01)1234567890134(21)111122233344(17)060606
我的做法:
parseStringToAnObject:函数(值){
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={};
而(value.length>0){
var-ok=false;
对于(变量i=0;i
结果:
我的函数返回正确的数据,但仅当我不使用可变字符数键入标识符时才返回。当我打字时
(01)1234567890134(21)abder123(17)121212
或
(01)1234567890134(10)123aaaaabbddd(21)qwerty
或
(01)1234567890134(17)060606(10)aabbcc121212(11)030303
它总是返回我false
请您提出一个更好更完善的方法好吗?提前感谢所有的答案和解决方案 以下是我的做法:
var s=“(01)1234567890134(11)060606(17)121212(21)1321asdfght(10)aaabbb”,
r={};
s、 替换(/\((\d\d)\([^()]+)/g,函数(m,p,d){r['identifier'+p]=d;返回“”;});
控制台日志(r)代码>我甚至不会使用正则表达式:
var final = {};
var a = "(01)12345678901234(11)060606(17)121212(21)1321asdfght(10)aaabbb";
a.split("(").slice(1).sort().map(function(i) {
var pieces = i.split(')');
final["identifier" + pieces[0]] = pieces[1];
});
console.log(final);
//Object {identifier01: "12345678901234", identifier10: "aaabbb", identifier11: "060606", identifier17: "121212", identifier21: "1321asdfght"}
var final = {};
var a = "(01)12345678901234(11)060606(17)121212(21)1321asdfght(10)aaabbb";
a.split("(").slice(1).sort().map(function(i) {
var pieces = i.split(')');
final["identifier" + pieces[0]] = pieces[1];
});
console.log(final);
//Object {identifier01: "12345678901234", identifier10: "aaabbb", identifier11: "060606", identifier17: "121212", identifier21: "1321asdfght"}