javascript正规表达式替换问题 400 请求报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

javascript正规表达式替换问题 400 请求报错 

2020-05-30 14:25:21 176 1

我要这样一段字符串需要用正则替换掉它: var str="method:function(a,b,c){var c={a,b};function a(){}},handler:function(){}"; 想要把function都替掉成为: var str = "method:null,handler:null"; 我这个问题匹配出错主要是{}主间的内容;

  //内容  document.getE().a.b();类似组件可以出现任意次; var re=/function\s*((\w*(,)?))\s{([^{}])}/gi; console.log(regStr.match(re).length); console.log(regStr.match(re)); console.log(regStr.replace(re,"null"));
我目前只能匹配空函数类似于: var str="method:function(){},action:function(){}"; 对于函数的{}中如果有内容我就没法判断了用(.)会匹配出错误的结果 哪位高手出来给我解释这问题

取消 提交回答
全部回答(1)
  • kun坤
    2020-05-30 14:25:37

    替换字符串的方法有很大隐患, 如果可以, 何不在eval得到object之后, 对object进行替换, 这样更简单且靠谱.

    "method:function(a,b,c){var c={a,b};function a(){}},handler:function(){}".replace(/(?:(function.+\})(,))|(?:(function.+\})$)/gi, "null$2")

    ######这样不行吧。。因为他有可能是嵌套的: var a=new Panel(title:aa,onclick:fn,items:[button:{onclick:fn}]); 这样肯定得有一个深度查找function类型的过程吧######

    引用来自“wtsoftware”的答案

    这样不行吧。。因为他有可能是嵌套的: var a=new Panel(title:aa,onclick:fn,items:[button:{onclick:fn}]); 这样肯定得有一个深度查找function类型的过程吧
    既然你是这样用的, 为什么要用正则? 传入的是一个对象, 为何不在传入之前先对对象进行替换. 任何JSON, 使用之前也要eval将其转为对象吧!?
    var config = {title:'aa',onclick:function(){},items:[{button:{onclick:function(){}}}]},
    		handler = function(config){
    			for (var o in config){
    				if (!config.hasOwnProperty(o)) {
    					console.log('ignore %o => %o of %o', o, config[o], Object.prototype.toString.apply(config[o]));
    					continue;
    				}else if (config[o] && Object.prototype.toString.apply(config[o]) === '[object Function]') {
    					console.log('delete %o => %o of %o', o, config[o], Object.prototype.toString.apply(config[o]));
    					delete config[o];
    				}else if (Object.prototype.toString.apply(config[o]) === '[object Array]' || Object.prototype.toString.apply(config[o]) === '[object Object]') {
    					console.log('enter %o => %o of %o', o, config[o], Object.prototype.toString.apply(config[o]));
    					handler(config[o]);
    					console.log('return %o => %o of %o', o, config[o], Object.prototype.toString.apply(config[o]));
    				}else console.log('ignore %o => %o of %o', o, config[o], Object.prototype.toString.apply(config[o]));
    			}
    		};
    handler(config);
    /*
    结果
    ignore "title" => "aa" of "[object String]"
    delete "onclick" => function (){} of "[object Function]"
    enter "items" => [Object] of "[object Array]"
    enter "0" => Object of "[object Object]"
    enter "button" => Object of "[object Object]"
    delete "onclick" => function (){} of "[object Function]"
    return "button" => Object of "[object Object]"
    return "0" => Object of "[object Object]"
    return "items" => [Object] of "[object Array]"
    */
    0 0
相关问答

11

回答

在阿里云上安装和运行Node.js全功略

ycwong 2013-09-18 15:17:30 64392浏览量 回答数 11

19

回答

【分享】如何提高网站的打开速度?

enj0y 2012-11-17 14:35:22 56988浏览量 回答数 19

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157672浏览量 回答数 145

28

回答

钉钉开放平台“常见问题常见问题常见问题“重要请关注

竹梅 2015-12-03 00:39:14 93747浏览量 回答数 28

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147221浏览量 回答数 22

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 146031浏览量 回答数 31

23

回答

【云服务器分享】网站访问速度快才是硬道理

dreamdoo 2012-10-15 10:15:02 85354浏览量 回答数 23

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305607浏览量 回答数 249

13

回答

【云服务器分享】如何节省网站流量

dreamdoo 2012-10-15 10:36:09 80454浏览量 回答数 13

14

回答

对象存储oss【问答合集】

我是管理员 2018-08-03 14:54:02 67710浏览量 回答数 14
+关注
0
文章
13401
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载