我有以下字符串:
// the length's not fixed. User could append more piped funtions.
{{ some:name | fn:some-function('ay') | fn:default(some:name) | some:other }}
目标是获得一个数组:
array[0] // some:name
array[1] // fn:some-function('ay')
array[2] // fn:default(some:name)
array[4] // some:other
// and so on
这是我到目前为止所拥有的:
^\{{2}(?:([^\|]+)\s\|)*(\s*[^\|^\}]+)\}{2}$
// it spits out:
// full match: {{ thing:name | fn:substring-before(':') | fn:default(thing:name) | some:other }}
// group 1: fn:default(thing:name)
// group 2: some:other
答案 0 :(得分:1)
您的正则表达式不起作用,因为如果用*
或+
量化组,则仅将最后一个重复项放入该组。所有其他的都将被丢弃。
找到多个匹配项,而不是查找一个完整的匹配项,每个匹配项都是数组的元素。
例如,您可以使用
(?:{{|\|)\s*([^|{}]+?)(?=\s*?(?:\||}}))
并获得每个比赛的第1组。
说明:
{{
或|
((?:{{|\|)
)开头([^|{}]+?)
)|
或}}
((?=\s*?(?:\||}}))
)