Xregexp javascript可选命名组由空格隔开
问题描述:
我正在研究支持以字母开头的命名参数的Xregexp表达式。这里是我的表达:Xregexp javascript可选命名组由空格隔开
(?:d:|duration:)(?<time>.*\S+).*(?:t:|title:)(?<title>(?:.*\S+))(?:.*(?:(?:p:|prize:)(?<prize>.*\S+)))
它运作良好,但问题是我想提出的p:<prize>
作为任选,我应该使用哪种表情?
我也想结束拍摄时,有一个白色的空间
例子:
我想要什么:
duration:1h 5m 1s title:Title test [p:prize]<-optionnal group
我想有prize
组为可选
如同当前表达式:
duration:1h 5m 1s title:Title test p:Something random
组的结果:
time
:1h 5m 1s
title
:Title test
prize
:Something random
答
你需要限制你的模式有点摆脱.*
会吃光了后续的子模式的最后出现。然后,使用延迟点模式(.*?
),只要需要将值匹配到下一个键,并在末尾添加$
(字符串末尾)锚点以确保您将获得所有带有惰性点的文本。
d(?:uration)?:(?<time>.*?)\s*t(?:itle)?:(?<title>.*?)\s*(?:p(?:rize)?:(?<prize>.*))?$
详细
-
d(?:uration)?:
- 一个d:
或duration:
-
(?<time>.*?)
- 集团 “时间”:任何零个或多个字符,尽可能少,到随后的子模式 的最左边的发生
-
\s*
- 0+空格 -
t(?:itle)?:
- 或者title:
或t:
-
(?<title>.*?)
- 组“标题”:任何零个或多个字符,尽可能少 -
\s*
- 0+空格 -
(?:
- 匹配的1点或0的出现的一个可选的非捕获组的开始:-
p(?:rize)?:
-p:
或prize:
-
(?<prize>.*)
- 集团 “奖”:任何零个或多个字符,尽可能少
-
-
)?
- 可选组的末尾 -
$
- 字符串结尾。
你有没有尝试在你的正则表达式的末尾添加一个'?'在结束括号之前? – Thijs
组'时间':'1小时5分1秒' 组'标题':\t'标题测试p:ee'我已经dit了,奖品组被标记为 –
只需添加'?'将不起作用。试试类似[this](https://regex101.com/r/T3B9o0/2)。或者甚至可能[像这样](https://regex101.com/r/lmOKvH/1)。 –