大家好,欢迎来到IT知识分享网。
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");
执行会被卡死
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30419.html