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 相关文章推荐
我遇到的参数传递中 双引号单引号嵌套问题
Feb 11 Javascript
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
Sep 19 Javascript
使用jquery mobile做幻灯播放效果实现步骤
Jan 04 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
BootStrap的双日历时间控件使用
Jul 25 Javascript
React数据传递之组件内部通信的方法
Dec 31 Javascript
深入理解requireJS-实现一个简单的模块加载器
Jan 15 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 07 Javascript
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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
PHP脚本数据库功能详解(中)
2006/10/09 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python中除法使用的注意事项
2014/08/21 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Python实现的质因式分解算法示例
2018/05/03 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
python中bytes和str类型的区别
2019/10/21 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
聘用意向书
2014/07/29 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
中秋节主题班会
2015/08/14 职场文书
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
利用Python实现模拟登录知乎
2022/05/25 Python