我有此文本模式(Shopify Doc):
{{- 'blog.comment.email' | t -}}
{{ 'layout.header.hello_user' | t: name: customer.first_name }}
{{ 'layout.comment.metadata' | t: author: comment.author, email: comment.email }}
{{'layout.comment.metadata'|t:author:comment.author,email:comment.email}}
我需要获取参数的“名称”和“键”。
{{- 'blog.comment.email' | t -}}
#expected_result = [blog.comment.email]
{{ 'layout.header.hello_user' | t: name: customer.first_name }}
#expected_result = [layout.header.hello_user, name]
{{ 'layout.comment.metadata' | t: author: comment.author, email: comment.email }}
#expected_result = [layout.comment.metadata, author, email]
//without spaces
{{'layout.comment.metadata'|t:author:comment.author,email:comment.email}}
#expected_result = [layout.comment.metadata, author, email]
正则表达式
{{- 'blog.comment.email' | t -}}
{{-? *'(.*)' *\| *t *-?}} works for the first case.
result = [blog.comment.email]
{{ 'layout.header.hello_user' | t: name: customer.first_name }}
{{-? *'(.*?)' *\| *t:? *((.+): *.*?)* *-?}} "works" for the second case,
result = [layout.header.hello_user, name: customer.first_name, name]
#expected_result = [layout.header.hello_user, name]
但是它也提取'name:customer.first_name',我只需要'layout.header.hello_user'和'name'
我无法使用第三个选项,我已经尝试过:
{{ 'layout.comment.metadata' | t: author: comment.author, email: comment.email }}
{{-? *'(.*?)' *\| *t:? *(([A-Za-z0-9]+): *.*?)* *-?}}
result = [layout.header.hello_user, name: email: comment.email, email]
#expected_result = [layout.header.hello_user, author, email]
但是它仅提取最后一个参数。
参数数量没有限制
要求存在“ | t”或“ | t”或“ | t”
答案 0 :(得分:0)
检查下一个正则表达式(?<={{-?\s*'(?<key>[^']+)'\s*\|\s*t\s*(?::(?:\s*\w+\s*:\s*[.\w]+\s*,)*)?)(?:\s*(?<param>\w+)\s*:\s*[.\w]+\s*)?(?=(?:,\s*\w+\s*:\s*[.\w]+\s*)*-?}})
。
要在线尝试正则表达式并获取说明,请单击here。
但是建议的解决方案需要进一步处理,因为每个单独的匹配都是键参数对,而不是键参数。
警告:regex101.com无法在运行iOS 11.4的iPad上运行的Safari中处理此正则表达式。