带有正则表达式的Javascript以不同的特定字符分割字符串

带有正则表达式的Javascript以不同的特定字符分割字符串,javascript,regex,Javascript,Regex,我有以下字符串 Name=(Last, First), Age=(31 year, 6 months, 3 day), Height= 6.1 ft, Employment=None, Email Address =/NA/, Mobile=XXXX 我想把它们分成以下几部分来建立一个字典 Name: "(Last, First)" Age: "(31 year, 6 months, 3 day)" Height: " 6.1 ft" ... 我偶然发现并尝试调整它,但可以让它与键一起工作,

我有以下字符串

Name=(Last, First), Age=(31 year, 6 months, 3 day), Height= 6.1 ft, Employment=None, Email Address =/NA/, Mobile=XXXX
我想把它们分成以下几部分来建立一个字典

Name: "(Last, First)"
Age: "(31 year, 6 months, 3 day)"
Height: " 6.1 ft"
...
我偶然发现并尝试调整它,但可以让它与键一起工作,而不带“()”。这是代码。将感谢您的帮助,并随时建议更简单或替代的方式

txt=“姓名=(最后一位,第一位),年龄=(31岁,6个月,3天),身高=6.1英尺,工作=无,电子邮件地址=/NA/,手机=XXXX”
//var r=/.+?=.+?(?=(\([^)]+\),)(.=)$)/g;
//变量r=/.+?=.+?(?=(=(*))|$)/g;
var r=/.+?=.+(?=(\),)|(\d\b,)|$)/g;
var obj=txt.match(r).reduce(函数(obj,match){
var keyValue=match.split(“”);
obj[keyValue[0]。替换(/,\s/g',)]=keyValue[1];
返回obj;
}, {});

控制台日志(obj)要匹配属性和值,可以使用:

(\w+)\s*=\s*(\([^)]+\)|[^,]+)
  • (\w+)
    -匹配并捕获属性(一个或多个单词字符)
  • \s*=\s*
    -后跟可选空格、a
    =
    和更多可选空格
  • (\([^)]+\)\[^,]+)
    -匹配并捕获以下任一项:
    • \([^]+\)
      -A
      ,后跟非
      字符,后跟
      ,或
    • [^,]+
      -非逗号字符
const str='Name=(最后一个,第一个),年龄=(31岁,6个月,3天),身高=6.1英尺,就业=无,电子邮件地址=/NA/,手机=XXXX';
常量obj={};
对于(str.matchAll(/(\w+)\s*=\s*(\([^)]+\)\124;[^,]+)/g)的常量[,属性,值]){
obj[prop]=val;
}

控制台日志(obj)这里有一种方法,使用智能前瞻只在正确的逗号上有条件地拆分:

var txt=“姓名=(最后一位,第一位),年龄=(31岁,6个月,3天),身高=6.1英尺,就业=无,电子邮件地址=/NA/,手机=XXXX”
var-map={};
var parts=txt.split(/,\s*(?![^(]*\)/);
部分。forEach(功能(项目、索引){
映射[item.split(/=/)[0]]=item.split(/=/)[1];
});

控制台日志(map)非常好。感谢您花时间解释正则表达式语法。一个小提示是,如果关键字是“员工姓名”这样的多个单词,它只会选择“姓名”。我把它改成了
/\w++\s*\w++\s*=\s*(\([^)]++\)\124;[^,]+)
,它工作了(和
(\w++\s*\w+
一样)。你解释了之后就容易多了。但是,我不确定
(\w+)\
中的括号是用来做什么的?如果“键”可以包含空格,我想您可以匹配任何东西,而不是
=
而不是
\w+
。括号捕获部分括号-它们被称为捕获组,它们允许您在Javascript中提取外部的子匹配项-括号中匹配的键部分进入
prop
变量,因为它是第一个捕获组。抱歉,我不知道如何匹配,但使用了
=
而不是
\w+
。似乎我所做的更改是不必要的,但不确定如何捕获
=
之前的所有内容。若要匹配
=
以外的任何内容,请使用负数字符集,
[^=]
,请参见代码段。这很好,而且更容易理解。谢谢你的帮助,我接受了你的帮助。我得到了两个很好的答案和很好的解释。如果在正确的逗号处进行拆分(例如,在括号内进一步拆分),您的代码更容易理解,并提供了更大的灵活性。