我需要正则表达式,它会导致以下结果
给出此符号:
{{> (lookup. 'needle')}}
Tt返回结果:
["needle"]
我尝试过这个,但是它匹配所有{{>\(.(.+?)}}
答案 0 :(得分:1)
您可以利用捕获组,而不是非贪婪的量词.+?
来利用negated character class
{{>\h*\([^(']+'([^')]+)'\)}}
{{>
匹配{{> \h*
匹配0+个水平空白字符(或\h+
匹配1个或更多)\([^(']+
匹配(
,然后匹配除(
或'
之外的任何字符的1+倍'(
匹配'
并开始捕获第1组
[^')]+
匹配除'
或)
以外的任意字符1倍以上)'
关闭组1并匹配'
\)}}
匹配)}}
在替换使用中
["$1"]
输出
["needle"]
修改
如果lookup
部分应该是静态的,则可以将模式更新为:
{{>\h*\(lookup[^']+'([^')]+)'\)}}
答案 1 :(得分:0)
如果符号将与书写的符号完全相同,{{> \(lookup\s*\. '(.*?)'\)}}
应该可以解决您的问题。它会查找所有字符的文字版本,然后使用捕获组仅收集'
标记之间的文本。 (请注意,如果捕获文本包含'
标记,则需要更改此正则表达式。)
编辑:正则表达式现在可以匹配lookup
和.
之间的任意数量的空格