我有一个字符串:
string = "{{1:123}} asdfadfasdfdfdfsaf {{1212:}}"
这是我当前的正则表达式模式:
var pattern = /[{{].*[}}]/;
当使用 match 时,我得到:
string.match(pattern)
//returns ["{{1:123}} asdfadfasdfdfdfsaf {{1212:}}"]
如何只获取第一个括号 block ,或者更好的是,获取一个包含每个括号 block 的数组?我理想的返回结果是:
["{{1:123}}", "{{1212:}}"]
最佳答案
您需要删除方括号并使用惰性量词:
var pattern = /{{.*?}}/g;
参见 demo
[{{]
只匹配一个 {
,因为它是一个字符类。与[}}]
相同,匹配1个}
。查看更多关于 character classes .
.*
匹配除换行符之外的尽可能多的任何字符,您将获得从第一个 {{
到最后一个 }} 的子字符串
如果你使用它。惰性量词将匹配第一个 }}
。另请参阅 What do lazy and greedy mean in the context of regular expressions特别是Lazy Quantifier Solution .
var re = /{{.*?}}/g;
var str = '{{1:123}} asdfadfasdfdfdfsaf {{1212:}}';
console.log(str.match(re));
关于javascript - 如何使用正则表达式在字符串中返回 2 个独立的 {{...}} block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401320/