javascript - 带分隔符的三个可选部分的正则表达式

标签 javascript regex parsing

我正在尝试使用以下任何不同组合的格式解析字符串的三个可选组件:

12345,abcd@ABCD   -> $1=12345 $2=abcd $3=ABC
12345,abcd        -> $1=12345 $2=abcd $3=empty
12345@ABCD        -> $1=12345 $2=empty $3=ABC
12345             -> $1=12345 $2=emty $3=empty
是否可以使用单个正则表达式?
我已经做了几次尝试。当字符串完整时没有问题,但缺少参数的表单正在转义给我:
(.+),(.+)@(.+)           // works when the string is complete
                         //  but how do you express the optionality?
(.+),?(.+)@?(.+)         // nope
(.*)[$,](.*)[$@](.*)     // neither
(另一种选择,将字符串拆分成看起来很简单的组件,但我对正则表达式的方式很好奇)

最佳答案

12345,abcd@ABCD   -> $1=12345 $2=abcd $3=ABC
12345,abcd        -> $1=12345 $2=abcd $3=empty
12345@ABCD        -> $1=12345 $2=empty $3=ABC
12345             -> $1=12345 $2=emty $3=empty
从您的预期输出看来,您想要 空组在匹配您的输入的同时匹配您的匹配项。你可以使用这个正则表达式:
/^(\d+),?([^@\n]*)@?(.*)$/g
RegEx Demo
请注意,此正则表达式将始终在每个匹配结果中返回 3 个捕获的组。
正则表达式详细信息:
  • ^ : 开始
  • (\d+) : 匹配 1+ 个数字并在组 #1
  • 中捕获
  • ,? : 匹配一个可选的逗号
  • ([^@]*) : 匹配 0+ 任何不是 @ 的字符并在组#2
  • 中捕获
  • @? : 匹配可选的 @
  • (.*) : 匹配 0+ 任意字符并在组 #3
  • 中捕获
  • $ : 结束
  • 关于javascript - 带分隔符的三个可选部分的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64750402/

    相关文章:

    c# - 从文本文件中读取固定宽度的记录

    javascript - React,在表单中加载脚本 (mercadopago)

    javascript - 选项卡按钮在表单文本字段中不起作用

    javascript - 正则表达式捕获捕获组中的所有内容(包括换行符)

    python - PyQt4 用户输入验证 - QlineEdit

    c++ - 调车场:缺少运算符(operator)参数

    ruby-on-rails - 如何通过读取 CSV 文件来保存大量数据

    javascript - 如何从 .t​​xt 文件中提取内容并在 HTML 中显示其中的随机行?

    javascript - 如何调试 Rails 项目中的 JavaScript 错误?

    正则表达式匹配每个字符后的所有内容