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继承的实现
Oct 24 Javascript
javascript 鼠标滚轮事件
Apr 09 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
May 11 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
一个极为简单的requirejs实现方法
Oct 20 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
vue开发调试神器vue-devtools使用详解
Jul 13 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
Sep 14 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
利用jsonp解决js读取本地json跨域的问题
Dec 11 Javascript
JavaScript如何判断对象有某属性
Jul 03 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
PHPUnit PHP测试框架安装方法
2011/03/23 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
使用PHP求两个文件的相对路径
2013/06/20 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
PHP 验证登陆类分享
2015/03/13 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python封装对象实现时间效果
2020/04/23 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python 异常处理的实例详解
2017/09/11 Python
详解django自定义中间件处理
2018/11/21 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
pycharm的python_stubs问题
2020/04/08 Python
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
软件设计的目标是什么
2016/12/04 面试题
建筑工程实习自我鉴定
2013/09/19 职场文书
会议邀请书范文
2014/02/02 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
劳模先进事迹材料
2014/12/24 职场文书
恋恋笔记本观后感
2015/06/16 职场文书