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} 还原成 {}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。