js 替换


Posted in Javascript onFebruary 19, 2008

问题:就是将()()()((())())换成[][][[[]][]]的那种了,处理括弧配对用的
作者:infinte
要求:
[1]支持任意的“括弧”,也就是可以用【】<>{}()……或者类似XML的:<a></a>、[cc][cc:over]、{ttt] [ttt}
[2]严格按照层次匹配,就是(a)b(c(d)e)换成[a]b[c[d]e]而非[a]b[c(d]e) (结束太早了)
[3]左括号比右括号多时,保留多余的括号,即:()()((()()) → [][]([[][]]
[4]右括号比左括号多,保留多余的括号,即:(()()(()()))))) → [[][][[][]]])))

方案一:使用堆栈
作者:winter
代码:

<script>  
var strArr = "()()((()())";  function change(str)  
{  
 var a=str.split("");  
 var c=0;  
 var stack=[];  
 var match={  
 "(":")",  
 "{":"}",  
 "<":">",  
 "【":"】"  
 }  
 for(var i=0;i<a.length;i++)  
 if(match[a[i]]){  
 stack.push([a[i],i]);  
 }  
 else if(a[i]==")"||a[i]=="}"||a[i]==">"||a[i]=="】"){  
 if(!stack.length)continue;  
 var tmp=stack.pop();  
 if(match[tmp[0]]==a[i])a[i]="]",a[tmp[1]]="[";  
 else stack.push(tmp);  
 }  
 return a.join("") ;  
}  
alert(change(strArr));  
</script> 

方案二:使用正则
作者:月影
代码:
<script>  
var strArr = "()()((()())";  
var o = strArr;  
var r = o;  
do{  
 o = r;  
 r = o.replace(/\(([^()]*)\)/g,function(s,a){return '['+a+']'});  
}while(o!=r);  
alert(r);  
</script> 
Javascript 相关文章推荐
javascript对象的property和prototype是这样一种关系
Mar 24 Javascript
用Javascript 获取页面元素的位置的代码
Sep 25 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
Nov 26 Javascript
JavaScript设计模式初探
Jan 07 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
浅谈键盘上回车按钮的js触发事件
Feb 13 Javascript
Vuex实现计数器以及列表展示效果
Mar 10 Javascript
JavaScript原型链与继承操作实例总结
Aug 24 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
javascript replace方法与正则表达式
Feb 19 #Javascript
window.addeventjs事件驱动函数集合addEvent等
Feb 19 #Javascript
setAttribute 与 class冲突解决
Feb 17 #Javascript
setInterval 和 setTimeout会产生内存溢出
Feb 15 #Javascript
一个js封装的不错的选项卡效果代码
Feb 15 #Javascript
ImageFlow可鼠标控制图片滚动
Jan 30 #Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
Jan 30 #Javascript
You might like
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
Python中处理时间的几种方法小结
2015/04/09 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Django ModelForm操作及验证方式
2020/03/30 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
个人求职信范例
2014/01/29 职场文书
超市创业计划书
2014/09/15 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
市场部岗位职责
2015/02/12 职场文书
离婚律师函范本
2015/05/27 职场文书
领导干部学习心得体会
2016/01/23 职场文书
初中信息技术教学反思
2016/02/16 职场文书
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis