我不擅长正则表达式,因此需要一些帮助:
我需要在内容中使用一个正则表达式找到多个选项:
{{ Value }}
- 总是{{ Value | Value 2 }}
- 可选的第二部分 - | 价值 2{{ Value | Value 2(Value3) }}
- 可选的第三部分 - (Value3)
规则:值之前或之后允许有空格
我得到的是这个,但它不适用于所有三个需求和可选:
/\{{(.*)|(.*)}}/siU
/\{{2}\s*?(.+)(?:\s*?\|\s*?(.+)\s*?(?:\(\s*?(.+)\s*?\))?)?\s*?\}{2}/isU
请自己美化这个。
\{{2}
是一个左大括号 ( \{
),正好是其中的两个 ( {2}
)。\s*?
是一个空格 ( \s
),零次或多次 ( *
) 并且尽可能多(?
在非贪婪模式下)(.+)
是任何字符 ( .
),一次或多次 ( +
)(?:x)?
是一个子表达式 x,它不添加到结果 ( ?:
) 中,并且必须永远不会出现或出现一次(尾随?
)。在这里,这用于使“值 2”部分可选。\s*?\|\s*?
与找到的空格一样多,一个竖线和更多的空格(如果找到)。\(\s*?(.+)\s*?\)
是左括号 ( \(
)、找到的空格数 (\s*?
再次)、实际内容 (至少一个字符, .+
)、更多空格和右括号。\}{2}
是右花括号,也正好是其中的两个。我的方法
/\{\{[\s\W]*((\w+)([\s\W]*\|[\s\W]*([\w]+)([\s\W]*\([\s\W]*(\w+)[\s\W]*\)[\s\W]*){0,1}){0,1})[\s\W]*\}\}/