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代码>另请参见