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))代码>
我忘了,“{”和“}”之间没有任何内容,如果它们之间的内容包含“}”或“@”,它将不匹配。