Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式分解带括号的字符串_Javascript_Regex_String - Fatal编程技术网

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"}