大侠求救 正则 循环替换字符串中的特定标签

wwfgu00ing 2015-01-03 11:28:45
有一个字符串包含特定的标签比如: [微笑] [听音乐] [大笑[坏笑] ] 今天心情不错
目的是 将 [] 的标签循环遍历出来 最终替换后的字符串为

demo1, demo2 demo3 今天心情不错 这个怎么实现呢 ?

另外 这就是一个表情说说,但是遇到 [大笑[坏笑] ] 这种情况该如何处理呢?
...全文
169 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
张运领 2015-01-03
  • 打赏
  • 举报
回复
看你想要怎么处理了,是分解成[大笑][坏笑],还是直接忽略后面的[坏笑]的。 按理说,如果正常的话,不应该会出现这样的结构的。
张运领 2015-01-03
  • 打赏
  • 举报
回复
别搞得这么复杂了吧,如果不是按照要求整的,就直接当错误的处理掉就好了。 像我之前没事写的那个方法,也是有问题,当出问题的层数多了,就乱了。 代码嘛,总归是有些规律的,才能实现,当出现了不规律的,直接当错误处理掉算了。 所以,sorry了。
wwfgu00ing 2015-01-03
  • 打赏
  • 举报
回复
引用 1 楼 zyl_lyr1019 的回复:
看你想要怎么处理了,是分解成[大笑][坏笑],还是直接忽略后面的[坏笑]的。 按理说,如果正常的话,不应该会出现这样的结构的。
分解成[大笑][坏笑] how to do it ?
wwfgu00ing 2015-01-03
  • 打赏
  • 举报
回复
顶顶看看顶顶看看
Go 旅城通票 2015-01-03
  • 打赏
  • 举报
回复
你的ubb标签有问题,解析会出问题
张运领 2015-01-03
  • 打赏
  • 举报
回复
var str = "a[微笑]asd [听音乐] 阿达 [大笑[坏笑]sdf[坏笑] ] 今天心情不错",
	reg = /\[[^\]]*|\][^\[]*|[^\[\]]+/g,
	arr = str.match(reg),
	res = [],
	one = null,
	next = null,
	tagLen = 0;;
	
var i = 0,len = arr.length;
for(i;i<len;i++){
	one = arr[i];
	tagLen = 0;
	if(one.indexOf("[") == 0){
		tagLen = one.length - one.replace(/\[/g,"").length;
		while((next = arr[++i]) && tagLen != (next.length - next.replace(/\]/g,"").length) ){
			console.log("while");
		}
		
		var index = one.indexOf("[",1);
		if(index != -1){
			one = one.substring(0,index);
		}
		res.push(one);
		
		if(next){
			index = next.lastIndexOf("]");
			if(index != -1){
				next = next.substring(index);
			}
			res.push(next);
		}
	}else if(one.indexOf("]") != 0){
		res.push(one);
	}
}
console.log(res);
str = res.join("");
console.log(str);
//a[微笑]asd [听音乐] 阿达 [大笑] 今天心情不错
//这个时候的结构,就比较正常了吧,使用正则就简单了。

i = 0;
str = str.replace(/\[[^\]]+\]/g,function($1,$2){
	i++;
	return "demo"+i;
});

console.log(str);
先使用一些方法,直接把错误的格式去除掉,然后格式简单了,再使用正则。 应该还有更好的方法,这个方法仅供参考。

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧