Javascript 如何使用正则表达式从字符串中获取不同类型的值?
我在过去两个小时尝试regex101,我想从字符串中获得以下信息Javascript 如何使用正则表达式从字符串中获取不同类型的值?,javascript,regex,Javascript,Regex,我在过去两个小时尝试regex101,我想从字符串中获得以下信息 19y.o. (Jun 24, 1987) 5'7" 148lbs 33y.o. (Jun 24, 1987) 5'7" 159lbs 21y.o. (Dec 3, 1998) 5'6" 143lbs 我试过^\dy$(?:…),但我无法接近我想要的东西。对于如何从一个字符串中获取4种不同类型的信息,确实需要一些帮助和解释。如果使用此表达式: { age: 19, dob: Jun 24,
19y.o. (Jun 24, 1987) 5'7" 148lbs
33y.o. (Jun 24, 1987) 5'7" 159lbs
21y.o. (Dec 3, 1998) 5'6" 143lbs
我试过
^\dy$(?:…)
,但我无法接近我想要的东西。对于如何从一个字符串中获取4种不同类型的信息,确实需要一些帮助和解释。如果使用此表达式:
{
age: 19,
dob: Jun 24, 1987,
height: 5'7",
weight: 148
}
{
age: 33,
dob: Jun 24, 1987,
height: 5'7",
weight: 159
}
{
age: 21,
dob: Dec 3, 1998,
height: 5'6",
weight: 143
}
匹配组的值如下所示:
^(\d{2})[^\(]+\((.+)\) (\d'\d") (\d+lbs)$
这个特殊的测试字符串的一个问题是它同时包含单引号和双引号,这使得在我熟悉的大多数编程语言中定义字符串文字非常困难。这是Python中的外观
0: 19y.o. (Jun 24, 1987) 5'7" 148lbs
1: 19
2: Jun 24, 1987
3: 5'7"
4: 148lbs
如果使用此表达式:
{
age: 19,
dob: Jun 24, 1987,
height: 5'7",
weight: 148
}
{
age: 33,
dob: Jun 24, 1987,
height: 5'7",
weight: 159
}
{
age: 21,
dob: Dec 3, 1998,
height: 5'6",
weight: 143
}
匹配组的值如下所示:
^(\d{2})[^\(]+\((.+)\) (\d'\d") (\d+lbs)$
这个特殊的测试字符串的一个问题是它同时包含单引号和双引号,这使得在我熟悉的大多数编程语言中定义字符串文字非常困难。这是Python中的外观
0: 19y.o. (Jun 24, 1987) 5'7" 148lbs
1: 19
2: Jun 24, 1987
3: 5'7"
4: 148lbs
您可以使用4个捕获组来获取单独的数据
import re
test = r"19y.o. (Jun 24, 1987) 5'7" + r'" 148lbs'
expr = r"^(\d{2})[^\(]+\((.+)\) (\d'\d" + r'") (\d+lbs)$'
match = re.match(expr, test)
for g in match.groups():
print(g)
字符串的开头^
捕获组11+位(\d+)
匹配除[^()]*\(
和(
和匹配)
(
捕获组21+次除([^()]+)
和(
)
匹配\)\s+
和1+空格字符)
捕获第3组1+位数(\d+“\d+”)\s+
1+位数和”
,然后匹配1+空格字符“
捕获第4组1+位数,然后匹配(\d+)磅
lbs
字符串结尾$
^(\d+)[^()]*\(([^()]+)\)\s+(\d+'\d+")\s+(\d+)lbs$
没有标记语言,但例如在Javascript中:
const regex=/^(\d+[^()]*\([^()]+)\s+(\d+'\d+)\s+(\d+)磅/米;
[
`19y.o.(1987年6月24日)5'7“148磅`,
`33y.o.(1987年6月24日)5'7“159磅`,
`21y.o.(1998年12月3日)5英尺6英寸143磅`
].forEach(s=>{
常量匹配=s.match(正则表达式);
如果(匹配){
常数结果={
年龄:匹配[1],
dob:匹配[2],
高度:匹配[3],
重量:匹配[4]
}
控制台日志(结果);
}
})
您可以使用4个捕获组来获取单独的数据
import re
test = r"19y.o. (Jun 24, 1987) 5'7" + r'" 148lbs'
expr = r"^(\d{2})[^\(]+\((.+)\) (\d'\d" + r'") (\d+lbs)$'
match = re.match(expr, test)
for g in match.groups():
print(g)
字符串的开头^
捕获组11+位(\d+)
匹配除[^()]*\(
和(
和匹配)
(
捕获组21+次除([^()]+)
和(
)
匹配\)\s+
和1+空格字符)
捕获第3组1+位数(\d+“\d+”)\s+
1+位数和”
,然后匹配1+空格字符“
捕获第4组1+位数,然后匹配(\d+)磅
lbs
字符串结尾$
^(\d+)[^()]*\(([^()]+)\)\s+(\d+'\d+")\s+(\d+)lbs$
没有标记语言,但例如在Javascript中:
const regex=/^(\d+[^()]*\([^()]+)\s+(\d+'\d+)\s+(\d+)磅/米;
[
`19y.o.(1987年6月24日)5'7“148磅`,
`33y.o.(1987年6月24日)5'7“159磅`,
`21y.o.(1998年12月3日)5英尺6英寸143磅`
].forEach(s=>{
常量匹配=s.match(正则表达式);
如果(匹配){
常数结果={
年龄:匹配[1],
dob:匹配[2],
高度:匹配[3],
重量:匹配[4]
}
控制台日志(结果);
}
})
您可以使用4个捕获组来获取值^(\d+[^()]*\([^()]+\)\s+(\d+'\d+)\s+(\d+)lbs$
从单个示例来看,没有明显有用的概括。请您展示几个示例输入和预期输出,以及您迄今为止的一次或两次尝试。此外,更新标记以显示确切的目标正则表达式变量;另请参见您可以使用4个捕获组来获取值^(\d+[^()]*\(([^()]+\)\s+(\d+'\d+”)\s+(\d+)lbs$
从一个示例来看,没有明显有用的概括。您能展示几个示例输入和预期输出,以及您到目前为止的一两次尝试吗?另外,请更新标记以显示哪个regex变量正好是目标;另请参阅