js 替換
更新時(shí)間:2008年02月19日 11:45:14 作者:
js 替換
問題:就是將()()()((())())換成[][][[[]][]]的那種了,處理括弧配對用的
作者:infinte
要求:
[1]支持任意的“括弧”,也就是可以用【】<>{}()……或者類似XML的:<a></a>、[cc][cc:over]、{ttt] [ttt}
[2]嚴(yán)格按照層次匹配,就是(a)b(c(d)e)換成[a]b[c[d]e]而非[a]b[c(d]e) (結(jié)束太早了)
[3]左括號比右括號多時(shí),保留多余的括號,即:()()((()()) → [][]([[][]]
[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>
作者:infinte
要求:
[1]支持任意的“括弧”,也就是可以用【】<>{}()……或者類似XML的:<a></a>、[cc][cc:over]、{ttt] [ttt}
[2]嚴(yán)格按照層次匹配,就是(a)b(c(d)e)換成[a]b[c[d]e]而非[a]b[c(d]e) (結(jié)束太早了)
[3]左括號比右括號多時(shí),保留多余的括號,即:()()((()()) → [][]([[][]]
[4]右括號比左括號多,保留多余的括號,即:(()()(()()))))) → [[][][[][]]])))
方案一:使用堆棧
作者:winter
代碼:
復(fù)制代碼 代碼如下:
<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>
方案二:使用正則
作者:月影
代碼:
復(fù)制代碼 代碼如下:
<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>
相關(guān)文章
微信小程序通過自定義animate-numbers組件實(shí)現(xiàn)進(jìn)入頁面時(shí)數(shù)字跳動(dòng)效果
文章介紹了如何在微信小程序中實(shí)現(xiàn)進(jìn)入頁面時(shí)的數(shù)字跳動(dòng)效果,通過自定義一個(gè)名為`animate-numbers`的組件來實(shí)現(xiàn)這一功能,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-01-01
JavaScrip實(shí)現(xiàn)PHP print_r的數(shù)功能(三種方法)
PHP print_r的函數(shù)很好用,可以用來打印數(shù)組、對象等的結(jié)構(gòu)與數(shù)據(jù),可惜JavaScript并沒有原生提供類似的函數(shù)。不過我們可以試著自己來實(shí)現(xiàn)這個(gè)函數(shù),下面提供一些方法與思路2013-11-11
PHPMyAdmin導(dǎo)入時(shí)提示文件大小超出PHP限制的解決方法
這篇文章主要介紹了PHPMyAdmin導(dǎo)入時(shí)提示文件大小超出PHP限制的解決方法,造成這個(gè)問題的原因是PHP上傳大小限制為2MB,修改PHP.ini配置即可解決這問題,需要的朋友可以參考下2015-03-03
JS獲取及設(shè)置TextArea或input文本框選擇文本位置的方法
這篇文章主要介紹了JS獲取及設(shè)置TextArea或input文本框選擇文本位置的方法,涉及TextArea及input文本操作技巧,需要的朋友可以參考下2015-03-03
使用pdf-lib.js實(shí)現(xiàn)pdf添加自定義水印功能
pdf-lib是一個(gè)強(qiáng)大的JavaScript庫,允許在任何JavaScript環(huán)境中創(chuàng)建和修改PDF文檔,下面就跟隨小編一起來學(xué)習(xí)一下如何使用pdf-lib實(shí)現(xiàn)pdf添加自定義水印功能吧2024-11-11

