Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,我有一个字符串: string = "{{1:123}} asdfadfasdfdfdfsaf {{1212:}}" 这是我当前的正则表达式模式: var pattern = /[{{].*[}}]/; 使用match时,我得到: string.match(pattern) //returns ["{{1:123}} asdfadfasdfdfdfsaf {{1212:}}"] 如何只获取第一个括号块,或者更好的是,获取一个包含每个括号块的数组?我理想的回报结果是: ["{{1:123}}

我有一个字符串:

string = "{{1:123}} asdfadfasdfdfdfsaf {{1212:}}"
这是我当前的正则表达式模式:

var pattern = /[{{].*[}}]/;
使用match时,我得到:

string.match(pattern)
//returns ["{{1:123}} asdfadfasdfdfdfsaf {{1212:}}"]
如何只获取第一个括号块,或者更好的是,获取一个包含每个括号块的数组?我理想的回报结果是:

["{{1:123}}", "{{1212:}}"]

您需要删除方括号并使用惰性量词:

var pattern = /{{.*?}}/g;

[{{]
只匹配一个
{
字符类。与
[}}]
相同,它匹配1
}
。了解更多关于

*
尽可能多地匹配除换行符以外的任何字符,如果使用它,您将获得从第一个
{{
到最后一个
}
的子字符串。惰性量词将与第一个
}
匹配。另外,请特别注意

var re=/{{.*}/g;
var str='{1:123}asdfadfasdfafaf{{{1212:}}';
console.log(str.match(re));

*
贪婪,会尽可能多地吞下字符串。尝试
*?
使其不贪婪。请注意,
[{]
是无点的。这是一个字符类。它匹配一个字符,而不是两个。它的字面意思是“如果
[[]
中的任何一个字符此时出现在字符串中”太棒了,我将它调整为/[{][{].[}][}]/g;但为什么它不是/[{][[[[}].?[}].[}]/g、 ?为什么您仍然需要星号?
[{]
再次毫无意义。一个char-char类只是一个cargo-cult编程。
[]
用于指定多个字符,例如
[A17bQ#]
或字符范围
[a-zA-Z]
。无需使用
[}]
[]
。大括号不是特殊的正则表达式字符。在这种情况下,不需要转义。如果在
{{
}}
中有很长的子字符串,您可能希望将惰性点展开为
var pattern=/{{[^}]*(?:}(?!}[^}]*)}/g另请参见