我正在尝试使用以下任何不同组合的格式解析字符串的三个可选组件:
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/