JS 检测代码格式化

console.log("start");
function t(){
    return t.toString().search('(((.+)+)+)+$').toString();
}
a=t();
console.log("end");

运行这段代码,会发现,程序执行不到log("end"),

但如果去掉t函数中的回车换行:

console.log("start");
function t(){    return t.toString().search('(((.+)+)+)+$').toString();}
a=t();
console.log("end");

那么,重点中的重点找到了,就是 serach 语句。

serach 与 indexof 相似,不同的是 search 是强制正则表达式的,而 indexOf 只是按字符串匹配的。serach将(((.+)+)+)+$视为正则表达式进行匹配。

到此,大体明白了它的原理了,其实也就是递归,让程序执行不下去

再来看正则表达式:(((.+)+)+)+$

“.”:匹配除 "\n" 之外的任何单个字符。

“+”:匹配前面的子表达式一次或多次。

(pattern): 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。

“$”: 与字符串结束的地方匹配,不匹配任何字符

测试正则表达式:

var str= `function t(){ console.log( t.toString().search('(((.+)+)+)+$').toString() );}`;
console.log( /(((.+)+)+)+$/.test(str) )

console.log("start");

正常

var str= `function t(){
     console.log( t.toString().search('(((.+)+)+)+$').toString() );
    }`;
console.log( /(((.+)+)+)+$/.test(str) )

console.log("start");

执行会被卡死

 posted on 2022-11-29 16:35  Rannie`  阅读(668)  评论(0编辑  收藏  举报
去除动画
找回动画