Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配花括号之间的特定部分_Javascript_Regex - Fatal编程技术网

Javascript 匹配花括号之间的特定部分

Javascript 匹配花括号之间的特定部分,javascript,regex,Javascript,Regex,我有以下示例字符串 你好{{bob.name}}bob.name{{{{john.name}} 我已经突出显示了我想匹配的部分。 它必须位于两端的两个花括号之间,并且必须是点之前的第一个单词 我尝试过这个正则表达式[^{{}]+(?=\}}),但是它匹配像这样的花括号中的所有内容 你好{{{bob.name}}bob.name{{{{john.name} 如果我能提供一个变量来查找它的名称,那也将非常好。您可以使用它,而无需任何前瞻 {{}确保您位于双括号内 ([^.]*)捕获除点以外的每个字

我有以下示例字符串

你好{{bob.name}}bob.name{{{{john.name}}

我已经突出显示了我想匹配的部分。 它必须位于两端的两个花括号之间,并且必须是点之前的第一个单词

我尝试过这个正则表达式
[^{{}]+(?=\}})
,但是它匹配像这样的花括号中的所有内容

你好{{{bob.name}}bob.name{{{{john.name}

如果我能提供一个变量来查找它的名称,那也将非常好。

您可以使用它,而无需任何前瞻

{{}
确保您位于双括号内

([^.]*)
捕获除点以外的每个字符

[^}]*
匹配双括号内的其余内容


第一个返回的组是您想要的。

您可以将此正则表达式与否定字符类、前瞻和捕获的组一起使用:

/{{([^}.]+)(?=(?:(?!}}).)*}})/

  • ([^}.]+)
    [^}.]+
    匹配的字符既不是点也不是
    }
    <代码>(…)在组1中捕获
  • (?=(?:(?!}}.)*})是一个前瞻,它断言我们前面有一个
    }

要替换
{…}
中的
bob
,请使用:

repl = str.replace(/({{)bob(?=(?:(?!}}).)*}})/gi, '$1newVal'); 
{{bob(?=(?:(?!}}).)*}})
要匹配
bob
内部
{{…}
使用:

repl = str.replace(/({{)bob(?=(?:(?!}}).)*}})/gi, '$1newVal'); 
{{bob(?=(?:(?!}}).)*}})
使用


(?为什么它不应该是mach
john
?我只想匹配某个名字,在我的例子中它是bob,另一次它可能是john或其他名字。如果输入是
{bob.n{a}me}
@anubhava,这将是一个语法错误,从我的角度来看,这将是一个更大的错误。输入是一个文本,包装在
{…}
根据OPIt,没有其他语法,它似乎返回{{bob和{john。我也不确定如何为要查找的名称提供一个变量,如果我可以提供一个值为bob的变量,它将与{bob.name}匹配,并且我可以用其他名称替换该名称,使其成为{newPerson.name},那将非常好}所以你在问题下面的评论说你只是在寻找一个特定的名字。如果是这样的话,
{(bob)(?=(?:(?!})*}})
将是你的regexThanks anubhava,我有最后一个问题。你的正则表达式匹配为{bob,但我可以在一个叫做组的东西中看到bob的名字。我尝试过使用replace,但它替换了{{bob part.你知道我如何用一个新名称替换“bob”组吗?你可以这样做:
repl=str.replace(/({)bob(?=(?:(!!})。*})/gi,$1newVal');
非常感谢你的时间和帮助。