javascript regexp匹配任何介于;{“和”};,但不是在“之间”@{“和”};

javascript regexp匹配任何介于;{“和”};,但不是在“之间”@{“和”};,javascript,regex,Javascript,Regex,两个字符串作为示例:“1@{loop1}dummy{s1}dummy”和“{loop1}dmy{s1}dmy”, 我的注册表表达式是:/[^@]\{([\S\S][^\}@]*)\}/g 我在以下地点进行了测试: 它匹配了第一个字符串中的“s1”,第二个字符串中的“loop1”,“s1”,这正是我需要的, 但在javascript中编写此代码时: var str1 = "1@{loop1}dummy{s1}dummy"; var str2 = "{loop1}dmy{s1}dmy"; var r

两个字符串作为示例:
“1@{loop1}dummy{s1}dummy”
“{loop1}dmy{s1}dmy”
, 我的注册表表达式是:
/[^@]\{([\S\S][^\}@]*)\}/g
我在以下地点进行了测试:

它匹配了第一个字符串中的“s1”,第二个字符串中的“loop1”,“s1”,这正是我需要的, 但在javascript中编写此代码时:

var str1 = "1@{loop1}dummy{s1}dummy";
var str2 = "{loop1}dmy{s1}dmy";
var reg = /[^@]\{([\S\s][^\}@]*)\}/g
function getRegMatchedStrs(reg,str){
    rs = [];
    var regRs = 1;
    while(regRs){
        regRs = reg.exec(str);
        regRs && rs.push(regRs[1]);
    }
    return rs;
}

console.log(getRegMatchedStrs(reg,str1)); // get ["s1"] as expected
console.log(getRegMatchedStrs(reg,str2)); // get ["s1"] unexpected has no "loop1"

谢谢你的帮助

您正在大括号前匹配一个非
@
字符,因此大括号不能位于字符串的开头。将
[^@]
更改为
(?:^[^@])
(字符串或非
@
的开头)

编辑:这并不能解决在
“{foo}{bar}”
中无法匹配
bar
的问题。老兄,没有后顾之忧真是糟透了。这里有两个解决方法:

var str1=“1@{loop1}dummy{s1}dummy”;
var str2=“{loop1}dmy{s1}dmy”;
var str3=“{loop1}{s1}dmy”;
变量reg1=/{(+?)}/g
函数getRegMatchedStrs1(reg,str){
var-rs=[];
var REGS=真;
而((regRs=reg.exec(str))){
如果(!regRs.index | | str.charAt(regRs.index-1)!='@')){
rs.push(regRs[1]);
}
}
返回rs;
}
log(JSON.stringify(getRegMatchedStrs1(reg1,str1));
log(JSON.stringify(getRegMatchedStrs1(reg1,str2));
log(JSON.stringify(getRegMatchedStrs1(reg1,str3))

我忘了,“{”和“}”之间没有任何内容,如果它们之间的内容包含“}”或“@”,它将不匹配。