javascript - 在 Javascript 中使用正则表达式容纳多个值
问题描述
我有/^(?:\[)(.*)(?:\|)(.*)(?:\|)(.*)(?:\|)(.*)(?:\|)(.*)(?:\])$/
捕获以下值的正则表达式字符串[john|doe|doe@email.com|doe_avatar|manager]
。我也喜欢[john|doe|doe@email.com|doe_avatar]
通过对两者使用相同的正则表达式来捕获价值。我怎样才能在Javascript中做到这一点?
解决方案
是的,这可以通过单个正则表达式实现,方法是将最后一段及其随附的管道包含\|
在一个附加的、可选的、非捕获组 ( (?:……)?
) 中。
const regex =
/^(?:\[)(.*?)(?:\|)(.*?)(?:\|)(.*?)(?:\|)(.*?)(?:(?:\|)(.*?))?(?:\])$/
const rows = [
'[john|doe|doe@email.com|doe_avatar|manager]',
'[jane|doe|jane@email.com|jane_avatar]',
]
const parse = str => {
const m = str.match(regex)
if (!m) return null
const [fullMatch, forename, surname, email, avatar, role] = m
return { fullMatch, forename, surname, email, avatar, role }
}
console.log(rows.map(parse))
正如@CertainPerformance 下面提到的,undefined
如果匹配不存在,则最终捕获组的结果将是
推荐阅读
- c - 动态数组未知大小 C
- java - 在 Intent Fulfillment 期间检索 Lex 结论声明
- rust - 如何在通道接收器的 for_each 闭包中执行异步数据库查询
- android - Android 应用程序启动画面无法进行所需的活动
- android - 如何像变量一样保存计时器时间
- windows-10 - 安装斯坦福核心 NLP
- flutter - 如何修复“在 performLayout() 期间引发以下 _Exception:异常:minIntrinsicWidth 大于 maxIntrinsicWidth (0)。”
- python - 我不知道可以使用哪些命令将此 python 脚本转换为不和谐代码
- python - 如何小写整个数据框?
- c# - 使用 Entity Framework 如何在没有大量查询结果集或数百个小查询的情况下创建嵌套对象?