日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

JavaScript,HTML 如何用正則表達(dá)式去除字符串中的HTML標(biāo)記??[以前的帖子...

 xnet 2007-01-11

JavaScript,HTML 如何用正則表達(dá)式去除字符串中的HTML標(biāo)記??[以前的帖子都沒有完全解決]

問(wèn)題 于 2006-09-14 18:43
從網(wǎng)上找到了如下版本:
1."<[^>]+>|</[^>]+>"
2."<\/*[^<>]*>"
3."<(.*)>.*<\/\1>|<(.*) \/>"

都無(wú)法正確地從以下字符串中得到文字內(nèi)容:
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>

應(yīng)該再加上點(diǎn)條件限制就行了,可是我就是搞不定,所以還請(qǐng)高人指點(diǎn)?。?br>
 
響應(yīng)者 1:
問(wèn)題出在
第一個(gè),少了轉(zhuǎn)意字符\
第二個(gè),貪婪模式所以不行
第三個(gè),中間有回車換行符,.是不能匹配的
響應(yīng)者 2:
還有些問(wèn)題,問(wèn)題很有意思
響應(yīng)者 3:
<script language=JAVAscript>
var str=‘<a href="..." onclick="if(this.href.length>30)alert(\‘too big\‘)">texttexttext</a>‘
obj=document.createElement("div")
obj.innerhtml=str
alert(obj.getElementsByTagName("a")[0].innerhtml)
obj.removeNode(true)
</script>
響應(yīng)者 4:
找了一個(gè)老外寫的,也不行 :(

"<[^>]*(>|$)/"
響應(yīng)者 5:
To 樓上的三星:
你的愿望是美好的,做起來(lái)是不可能滴。我是要在別處使用此表達(dá)式,不是在瀏覽器里 :(

還是表示感謝 ,呵呵
響應(yīng)者 6:
/<\/?[^<>]+>/g
響應(yīng)者 7:
To meizz :
感謝回復(fù)!
但,還是不行......
響應(yīng)者 8:
因?yàn)槔锩嬗写笥谔?hào),如果是純正則,那還要想想
響應(yīng)者 9:
代碼我是測(cè)試過(guò)的。

<textarea id="txt" style="width: 100%; height: 200px">
aa<b> > </b> < bb
<br/><u>xi
</u>
</textarea>
<input type="button" value="ok" onclick="var e=document.getElementById(‘txt‘); e.value=e.value.replace(/<\/?[^<>]+>/g, ‘‘)">
響應(yīng)者 10:
這個(gè)問(wèn)題還要具體情況具體分析下,比如具體的情況中,中間的內(nèi)容中肯定沒有>字符等等條件,
如果是上面的條件可以用下面的代碼。
單憑現(xiàn)在的條件用一個(gè)正則很難實(shí)現(xiàn),用多個(gè)到是可以的,首先先把奇數(shù)的"和‘全替換成別的特殊字符,然后替換特殊字符+ .*? + > + .*? + ["‘],然后用上面的正則替換掉<>之間的內(nèi)容就可以了,類似一個(gè)小型的語(yǔ)法分析器
<script language=JAVAscript>
var str=‘<a href="..." onclick="if(this.href.length>30)alert(\‘too big\‘)">texttexttext</a>‘
re=/\/?<.+?(>(?=((([^>]*?)<)|$)))/g
alert(str.replace(re,‘‘))
</script>
響應(yīng)者 11:
我想應(yīng)該是這樣的匹配規(guī)則:

左尖括號(hào)+若干多字符+下一個(gè)左尖括號(hào)之前的最后一個(gè)右括號(hào)

在此之間的全部認(rèn)為是Match的。
響應(yīng)者 12:
/(?:<html.*?>)((\n|\r|.)*?)(?:<\/html>)/

響應(yīng)者 13:
沒看清楚題目:sorry

<textarea id="txt" style="width: 100%; height: 200px">
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>
</u>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JAVAScript">
<!--
function mm()
{
var e=document.getElementById(‘txt‘);
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\‘[^\‘]*\‘|\"[^\"]*\"))*)*\/?\s*>/g, ‘‘);
}
//-->
</SCRIPT>
響應(yīng)者 14:
上面我的還有些問(wèn)題 改成re=/<.+?(>(?=((([^>]*?)<)|(\s*$))))/g
可惜這個(gè)匹配不了文本中包含>這個(gè)的情況

\/?應(yīng)該可以去掉吧
響應(yīng)者 15:
梅鉆的思路應(yīng)該是=后面的“”或‘’吧,但是如果有下面這種就匹配不了了
<textarea id="txt" style="width: 100%; height: 200px">
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=asd>texttexttext</a>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JAVAScript">
<!--
function mm()
{
var e=document.getElementById(‘txt‘);
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\‘[^\‘]*\‘|\"[^\"]*\"))*)*\/?\s*>/g, ‘‘);
}
//-->
</SCRIPT>
響應(yīng)者 16:
我終于知道紅鉆是怎么煉成的了 :)

太謝謝meizz(梅花雪)了!?。?br>
meizz寫的表達(dá)式至少能夠處理90%的情況!

對(duì)于這個(gè)問(wèn)題我已經(jīng)比較滿意了,就算是已經(jīng)解決了,

再放兩天,給大伙看看后就結(jié)帖,哈哈
響應(yīng)者 17:
To 天外水火(我要多努力)) :
我說(shuō)的沒能處理的那10%就是你所說(shuō)的情況,name后面沒有引號(hào),就會(huì)出問(wèn)題。
響應(yīng)者 18:
做老本行,研究了下梅老大的代碼,我改了點(diǎn),:)
<textarea id="txt" style="width: 100%; height: 200px">
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>
</u>
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=asd>texttexttext</a>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JAVAScript">
<!--
function mm()
{
var e=document.getElementById(‘txt‘);
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\‘[^\‘]*\‘|\"[^\"]*\"))*)*[^‘"]*?>/g, ‘‘);
}
//-->
</SCRIPT>
響應(yīng)者 19:
在上述情況下,等號(hào)后面的值中,如果有“>”的話,則這個(gè)右尖括號(hào)單純從字符角度看,和html標(biāo)記的右尖括號(hào)似乎已經(jīng)沒有區(qū)別了。

PS:寫程序的是應(yīng)該追求完美,但總是這樣麻煩別人,我還是有點(diǎn)過(guò)意不去的:) 不過(guò)meizz能再完善一下那就最好拉,哈哈,再次感謝 !
響應(yīng)者 20:
哈哈,更加感謝天外水火!

現(xiàn)在的代碼很完美啊,暫時(shí)沒有發(fā)現(xiàn)問(wèn)題 :)
響應(yīng)者 21:
AO,一個(gè)小問(wèn)題:
<a href="..." onclick=if(this.href.length>30)alert(‘too big‘) name=asd>texttexttext</a>
不能正確匹配....這就是我說(shuō)的“在上述情況下,等號(hào)后面的值中,如果有‘>’的話....”
響應(yīng)者 22:
恐怕這種情況html解析也應(yīng)該從中間的>結(jié)束吧,后面的>應(yīng)該算在頁(yè)面內(nèi)容中
響應(yīng)者 23:
暈倒,沒人理我

正則:/(?:<html.*?>)((\n|\r|.)*?)(?:<\/html>)/

代碼:
<script>
var str="ab123<html><def456>c7ghi<htmljkl890</html>mno12p>qrs345<tu>vw</html3>x4y5z6789";
var reg=/(?:<html.*?>)((\n|\r|.)*?)(?:<\/html>)/g;
var result=str.replace(reg,"$1");
alert("原式為:"+str+"\n 替換后:"+result);
</script>
響應(yīng)者 24:
AO,一個(gè)小問(wèn)題之二:

<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=as<d>texttexttext</a>
這句正確匹配。(變化體現(xiàn)在name中,現(xiàn)在name的值是“as<d”)

<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=as>d>texttexttext</a>
這句就錯(cuò)了 :( (現(xiàn)在name的值是“as>d”)


嘿嘿,俺是不是心黑了點(diǎn)?
響應(yīng)者 25:
對(duì)于有轉(zhuǎn)義的 \" \" 還是不行:

<textarea id="txt" style="width: 100%; height: 200px">
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a
href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=asd>texttexttext</a>
</u>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JAVAScript">
<!--
function mm()
{
var e=document.getElementById(‘txt‘);
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\‘[^\‘]*\‘|\"[^\"]*\"|[^\s\‘\"<>]+))*)*\/?\s*>/g, ‘‘);
}
//-->
</SCRIPT>
響應(yīng)者 26:
To zhangfmIT():

哈哈,不是不理你,是你的代碼在我這邊運(yùn)行不了,總出錯(cuò),所以我也沒法試驗(yàn)了啊

而且,我主要是來(lái)問(wèn)如何從
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>
里用正則表達(dá)式取出“texttexttext”的,呵呵
響應(yīng)者 27:
sorry,偶也看錯(cuò)了
響應(yīng)者 28:
對(duì)于有轉(zhuǎn)義的 \" \" 還是不行:


-----------------------------------
恐怕這里不能用[^]這個(gè)來(lái)匹配了,覺得?!這種應(yīng)該可以
響應(yīng)者 29:
呵呵,加這個(gè)東西應(yīng)該沒有問(wèn)題,只是我想試試不用非貪婪和預(yù)查,是否也能解決問(wèn)題
響應(yīng)者 30:
To zhangfmIT() again:
你的代碼可以運(yùn)行起來(lái),不過(guò)需要改為<script language="JAVAscript">后才能執(zhí)行。

To 天外水火:
<a href="..." onclick=if(this.href.length>30)alert(‘too big‘) name=asd>texttexttext</a>
這是非法的html代碼。onclick事件不會(huì)被執(zhí)行。所以如果在正確的頁(yè)面中,這種情況應(yīng)該是不會(huì)存在的。第二個(gè)小Bug也是小概率事件 :)
響應(yīng)者 31:
在Dhtml中, " 和 \" 它們的長(zhǎng)度都是一。也就是說(shuō),它們實(shí)際上是同一個(gè)東西。
比如:
var s1=‘"‘;
var s2=‘\"‘;
s1和s2是全相等的。
響應(yīng)者 32:
是啊,現(xiàn)在的問(wèn)題是meizz說(shuō)的那個(gè)還行
<a href="..." onclick="if(this.href.length>30)alert(\"too big\")" name=asd>texttexttext</a>
響應(yīng)者 33:
<a href="..." onclick="if(this.href.length>30)alert(\"too big\")" name=asd>texttexttext</a>
這種寫法本身就是非法的啊,也就是說(shuō)
onclick="if(this.href.length>30)alert(\"too big\")"
當(dāng)于
onclick="if(this.href.length>30)alert("too big")",
所以對(duì)于一個(gè)正確的頁(yè)面,是不太應(yīng)該出現(xiàn)的。
響應(yīng)者 34:
1、為什么“<a href="..." onclick=if(this.href.length>30)alert(‘too big‘) name=asd>texttexttext</a>
這是非法的html代碼。onclick事件不會(huì)被執(zhí)行”呢?

<a href="page2.html" onClick="count++;alert(count);">下一頁(yè)</a>

2、弱弱的問(wèn)下,那個(gè)正則[!\w\-:]什么意思
響應(yīng)者 35:
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=as>d>texttexttext</a>

呵呵,怎么去告訴程序name是as>d還是as呢,規(guī)范的寫的話屬性不是都加引號(hào)嗎,那就ok了~
響應(yīng)者 36:
不管合不合了吧,也可以實(shí)現(xiàn)了,呵呵
<textarea id="txt" style="width: 100%; height: 200px">
aa<b disabled style="color: red" > > </b> < bb
<br/><u>xixxxxxxxxxxxxxxxxxx
<a
href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)" name=asd>texttexttext</a>
<a href="..." onclick="if(this.href.length>30)alert(\"too big\")" name=asd>texttexttext</a>
</u>
</textarea>
<input type="button" value="ok" onclick="mm()" />
<SCRIPT LANGUAGE="JAVAScript">
<!--
function mm()
{
var e=document.getElementById(‘txt‘);
e.value=e.value.replace(/<\/?[!\w\-:]+(\s+\w+\s*(=\s*(\‘(?:((\\\‘)|[^\‘]))*\‘|\"(?:((\\\")|[^\"]))*\"|[^\s\‘\"<>]+))*)*\/?\s*>/g, ‘‘);
}
//-->
</SCRIPT>
響應(yīng)者 37:
上面很多的測(cè)試內(nèi)容只是舉個(gè)例子,有的地方有一些語(yǔ)法錯(cuò)誤
[!\w\-:]是因?yàn)閈w不能包含!、:、-字符
響應(yīng)者 38:

都是強(qiáng)人,暈中~
響應(yīng)者 39:
真是感謝大家的熱心解答啊,哈哈,謝謝謝謝 ?。。?
響應(yīng)者 40:
感謝強(qiáng)人。。。留影。收藏。。。。。。
響應(yīng)者 41:
我用.NET是這么做的!
strCNLetter = Regex.Replace(strMyhtml,"<[^>]*>", "");
strCNLetter = Regex.Replace(strCNLetter,"\\s+", " ");//替換空格
響應(yīng)者 42:
都跑首頁(yè)上去了,mark下
響應(yīng)者 43:
又有新突破,我在國(guó)外的網(wǎng)站上,找到了php中,strip_tags()函數(shù)所使用的正則表達(dá)式了,如下:
</?\w+((\s+\w+(\s*=\s*(?:".*?"|\‘.*?\‘|[^\‘">\s]+))?)+\s*|\s*)/?>
似乎比樓上幾位大大的要簡(jiǎn)練一些,而且那此敏感字符都能夠被正確處理。

此表達(dá)式,值得收藏!?。?!
響應(yīng)者 44:
╭═══╮ ╭═══╮ ╭══════╮   
╰╮ ╭╯ ╰╮ ╭╯ ╰╮ ╭══╮╰╮  
 ║ ║   ║ ║   ║ ║  ╰╮╰╮ 
 ║ ║   ║ ║   ║ ║   ║ ║ 
 ║ ║   ║ ║   ║ ║  ╭╯╭╯ 
 ║ ║   ║ ║   ║ ╰══╯╭╯  
 ║ ║   ║ ║   ║ ╭═══╯   
 ║ ║   ║ ║   ║ ║       
 ╰╮╰╮ ╭╯╭╯   ║ ║       
  ╰╮╰═╯╭╯   ╭╯ ╰╮      
   ╰═══╯    ╰═══╯
響應(yīng)者 45:
╭═══╮ ╭═══╮ ╭══════╮   
╰╮ ╭╯ ╰╮ ╭╯ ╰╮ ╭══╮╰╮  
 ║ ║   ║ ║   ║ ║  ╰╮╰╮ 
 ║ ║   ║ ║   ║ ║   ║ ║ 
 ║ ║   ║ ║   ║ ║  ╭╯╭╯ 
 ║ ║   ║ ║   ║ ╰══╯╭╯  
 ║ ║   ║ ║   ║ ╭═══╯   
 ║ ║   ║ ║   ║ ║       
 ╰╮╰╮ ╭╯╭╯   ║ ║       
  ╰╮╰═╯╭╯   ╭╯ ╰╮      
   ╰═══╯    ╰═══╯
響應(yīng)者 46:
看了一下你后來(lái)提供的這個(gè)正則,說(shuō)實(shí)話還不如我的正確度高:
\".*?\" 匹配不了換行符的,所以沒有 \"[^\"]*\" 好。
且我一直避免使用 ?: 這種預(yù)查功能是為了兼容 IE5.0
響應(yīng)者 47:
引用
呵呵,加這個(gè)東西應(yīng)該沒有問(wèn)題,只是我想試試不用非貪婪和預(yù)查,是否也能解決問(wèn)題

-----------------------------------------------------------
上邊這句應(yīng)該是有含義的,我涉足程序的時(shí)間比較短,對(duì)版本方面的知識(shí)還要多學(xué)習(xí),查了下資料,手頭上沒有低版本的機(jī)器,沒辦法測(cè)試,帖出來(lái)大家看看

非貪婪匹配 ie5.0以上(不含5.0)
預(yù)查 ie5.0以上(不含5.0)
replace()function返回不同的匹配值 5.5以上
響應(yīng)者 48:
能否直接替換掉texttexttext?
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多