Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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 Typescript将字符串解析为数字组,如345-67和包含单词和数字的文本_Javascript_Typescript_Split - Fatal编程技术网

Javascript Typescript将字符串解析为数字组,如345-67和包含单词和数字的文本

Javascript Typescript将字符串解析为数字组,如345-67和包含单词和数字的文本,javascript,typescript,split,Javascript,Typescript,Split,我的字符串的格式是“[111-11]文本,这里有数字111,[222-22-22];333-33文本”,我想对其进行解析,以便得到代码[111-11]、[222-22-22]、[333-33]及其对应的文本。 我没有固定的拆分器,除了代码xxx xx或xxx xx 我试过用这种方法,但它无法在desc部分获得数字\D将得到除数字以外的任何东西 let text = "[111-11] text here with digits 111, [222-22-22]; 333-33 text here

我的字符串的格式是“[111-11]文本,这里有数字111,[222-22-22];333-33文本”,我想对其进行解析,以便得到代码[111-11]、[222-22-22]、[333-33]及其对应的文本。 我没有固定的拆分器,除了代码xxx xx或xxx xx

我试过用这种方法,但它无法在desc部分获得数字\D将得到除数字以外的任何东西

let text = "[111-11] text here with digits 111, [222-22-22]; 333-33 text here";
let codes=[];
let result = text.replace(/(\d{3}(-\d{2})+)(\D*)/g,(str, code, c, desc) =>  {      
        desc = desc.trim().replace(/[\[\]']+/g,'');   
       if (code) codes.push({'code':code.trim(),'desc': desc});
        return str;
    }); //parse and split codes
最后,我想要这种风格的结果:

[{code:'111-11', desc:'text here with digits 111'},
{code:'222-22-22', desc:''},
{code:'333-33', desc:'text here'}]

非常感谢您的帮助。

您可以分组搜索括号值和以下文本,并对括号部分或字符串结尾进行正向查找。然后分解字符串并推送想要的对象

const regex=/\[?(\d{3}-\d\d)+\]?(.*?(=\[?\d{3}-\d\d)+\]?|$)/gm;
const str=`[111-11]此处的文本带有数字111,[222-22-22];333-33这里的文字`;
var m,
代码,描述,
结果=[];
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}        
({1:code,3:desc}=m);
result.push({code,desc})
}
控制台日志(结果)另一种方法:

const Sep = ','
const PatSep = /[,;]/g
// skippng first spaces, then getting the numbers (and ignoring the brackets
// if presents), then gets rest
const PatPart = /^\s*\[?(\d{3}(-\d{2})+)]?(.*)$/


const src =
  "[111-11] text here with digits 111, [222-22-22]; 333-33 text here"

const parse = src => {
  // to avoir differents terminations
  const normalized = src.replace (PatSep, Sep)

  return normalized.split (Sep).reduce((acc, part) => {
    // getting code and desc from part
    const [_, code, __, desc] = part.match (PatPart)

    // accumulating in desired array
    return [
      ...acc,
      {code, desc}
    ]
  }, [])
}

console.log(parse (src))

)()

“及其对应文本”是什么意思。请同时添加想要的结果。感谢Nina的帮助。对应的文本是指直到下一个代码格式或字符串结尾的文本。为什么在第二种情况下desc为空而不是分号?逗号或分号是分隔符吗?逗号和分号并不总是分隔符。它们也可以是desc文本的一部分。谢谢你,尼娜。真的很有帮助。我没有想到向前看,在我的尝试中,exec循环总是在infinte循环中进行。。。非常感谢。这真的很有帮助,谢谢你。这是一个好办法。当我试图简化这里的问题陈述时,我没有提到逗号和分号可以是描述文本的一部分,所以在我的例子中,使用它作为第一个拆分器是不起作用的。