共计 988 个字符,预计需要花费 3 分钟才能阅读完成。
JS 正则获取层级嵌套 {} 中的内容算法思路
JS 中应用一个正则表达式匹配多层嵌套有肯定局限性,咱们能够换个思路实现。
想要取得层级嵌套中的 function(){}; 能够分三步
1. 本义 2. 索引 3. 匹配
// 测试字符串
$App = {
init:function(){$acs = reg('{}');
$acc = $acs.place(/}/, '};');
},
test:function(){$acs = Model('cast:body');
for(){
b={
a:{
x:{
y:{z:{}
}
}
},
b:{}};
};
}
};
function(){b={a:{x:{y:{z:{}}}}, b:{}};};
var a=99;
function(){c={a:{}, b:{}};};
// 1. 本义 字符串 或 正则中的 {}
// reg = ‘{}’ 或 place(/}/, ‘};’);
$acs = reg(‘<%’);
$acc = $acs.place(/[%>]/, ‘[%>];’);
// 2.{} 建设成对索引 作为正则匹配起止辨认符 [要害]
$App = {0%
init:function(){1%
$acs = reg('[<%][%>]');
$acc = $acs.place(/[%>]/, '[%>];');
%1},
test:function(){1%
$acs = Model('cast:body');
for(){2%
b={3%
a:{4%
x:{5%
y:{6%
z:{7%%7}
%6}
%5}
%4},
b:{4%%4}
%3};
%2};
%1}
%0};
function(){0%b={1%a:{2%x:{3%y:{4%z:{5%%5}%4}%3}%2}, b:{2%%2}%1};%0};
var a=99;
function(){0%c={1%a:{2%%2}, b:{2%%2}%1};%0};
// 3. 按起止辨认符循环匹配 function(){}
Arguments(5) [‘function(){0% …%0}’..]
Arguments(5) [‘function(){0% …%0}’..]
Arguments(5) [‘function(){1% …%1}’..]
Arguments(5) [‘function(){1% …%1}’..]
// 后果
// 胜利取得 多层嵌套 function(){中的内容}
// 解决实现 再将本义的 <% 以及带起止辨认符的 {1% …%1} 还原成 {}