我有以下示例字符串。
Hello {{bob.name}} bob.name {{john.name}}
我已经突出显示了我想要匹配的部分。 它必须位于两端的两个大括号之间,并且必须是点之前的第一个单词。
我尝试过这个正则表达式[^{{}}]+(?=\}})
,但它匹配大括号之间的所有内容,如下所示
Hello {{bob.name}} bob.name {{john.name}}
如果我可以提供一个用于查找名称的变量,那就太好了。
最佳答案
您可以将此正则表达式与否定字符类、前瞻和捕获组一起使用:
/{{([^}.]+)(?=(?:(?!}}).)*}})/
([^}.]+)
:[^}.]+
匹配非点且非}
的字符>。(...)
在第 1 组中捕获。(?=(?:(?!}}).)*}})
是一个前瞻,断言我们前面有一个}}
。
要替换 {{...}}
内的 bob
,请使用:
repl = str.replace(/({{)bob(?=(?:(?!}}).)*}})/gi, '$1newVal');
要匹配 {{...}}
内的 bob
使用:
{{bob(?=(?:(?!}}).)*}})
关于javascript - 匹配大括号之间的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48319709/