3
回答
javascript正规表达式替换问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

我要这样一段字符串需要用正则替换掉它:

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(){}";

对于函数的{}中如果有内容我就没法判断了用(.*)会匹配出错误的结果

哪位高手出来给我解释这问题

举报
黑神领主
发帖于6年前 3回/252阅
共有3个答案 最后回答: 6年前

替换字符串的方法有很大隐患, 如果可以, 何不在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]"
*/

顶部