JavaScript,HTML 如何用正則表達(dá)式去除字符串中的HTML標(biāo)記??[以前的帖子都沒有完全解決]
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>
第一個(gè),少了轉(zhuǎn)意字符\
第二個(gè),貪婪模式所以不行
第三個(gè),中間有回車換行符,.是不能匹配的
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>
"<[^>]*(>|$)/"
你的愿望是美好的,做起來(lái)是不可能滴。我是要在別處使用此表達(dá)式,不是在瀏覽器里 :(
還是表示感謝 ,呵呵
感謝回復(fù)!
但,還是不行......
<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, ‘‘)">
如果是上面的條件可以用下面的代碼。
單憑現(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>
左尖括號(hào)+若干多字符+下一個(gè)左尖括號(hào)之前的最后一個(gè)右括號(hào)
在此之間的全部認(rèn)為是Match的。
<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>
可惜這個(gè)匹配不了文本中包含>這個(gè)的情況
\/?應(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>
太謝謝meizz(梅花雪)了!?。?br>
meizz寫的表達(dá)式至少能夠處理90%的情況!
對(duì)于這個(gè)問(wèn)題我已經(jīng)比較滿意了,就算是已經(jīng)解決了,
再放兩天,給大伙看看后就結(jié)帖,哈哈
我說(shuō)的沒能處理的那10%就是你所說(shuō)的情況,name后面沒有引號(hào),就會(huì)出問(wè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>
PS:寫程序的是應(yīng)該追求完美,但總是這樣麻煩別人,我還是有點(diǎn)過(guò)意不去的:) 不過(guò)meizz能再完善一下那就最好拉,哈哈,再次感謝 !
現(xiàn)在的代碼很完美啊,暫時(shí)沒有發(fā)現(xiàn)問(wèn)題 :)
<a href="..." onclick=if(this.href.length>30)alert(‘too big‘) name=asd>texttexttext</a>
不能正確匹配....這就是我說(shuō)的“在上述情況下,等號(hào)后面的值中,如果有‘>’的話....”
正則:/(?:<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>
<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)?
<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ùn)行不了,總出錯(cuò),所以我也沒法試驗(yàn)了啊
而且,我主要是來(lái)問(wèn)如何從
<a href="..." onclick="if(this.href.length>30)alert(‘too big‘)">texttexttext</a>
里用正則表達(dá)式取出“texttexttext”的,呵呵
-----------------------------------
恐怕這里不能用[^]這個(gè)來(lái)匹配了,覺得?!這種應(yīng)該可以
你的代碼可以運(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也是小概率事件 :)
比如:
var s1=‘"‘;
var s2=‘\"‘;
s1和s2是全相等的。
<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)的。
這是非法的html代碼。onclick事件不會(huì)被執(zhí)行”呢?
<a href="page2.html" onClick="count++;alert(count);">下一頁(yè)</a>
2、弱弱的問(wèn)下,那個(gè)正則[!\w\-:]什么意思
呵呵,怎么去告訴程序name是as>d還是as呢,規(guī)范的寫的話屬性不是都加引號(hào)嗎,那就ok了~
<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>
[!\w\-:]是因?yàn)閈w不能包含!、:、-字符
都是強(qiáng)人,暈中~
strCNLetter = Regex.Replace(strMyhtml,"<[^>]*>", "");
strCNLetter = Regex.Replace(strCNLetter,"\\s+", " ");//替換空格
</?\w+((\s+\w+(\s*=\s*(?:".*?"|\‘.*?\‘|[^\‘">\s]+))?)+\s*|\s*)/?>
似乎比樓上幾位大大的要簡(jiǎn)練一些,而且那此敏感字符都能夠被正確處理。
此表達(dá)式,值得收藏!?。?!
╰╮ ╭╯ ╰╮ ╭╯ ╰╮ ╭══╮╰╮
║ ║ ║ ║ ║ ║ ╰╮╰╮
║ ║ ║ ║ ║ ║ ║ ║
║ ║ ║ ║ ║ ║ ╭╯╭╯
║ ║ ║ ║ ║ ╰══╯╭╯
║ ║ ║ ║ ║ ╭═══╯
║ ║ ║ ║ ║ ║
╰╮╰╮ ╭╯╭╯ ║ ║
╰╮╰═╯╭╯ ╭╯ ╰╮
╰═══╯ ╰═══╯
╰╮ ╭╯ ╰╮ ╭╯ ╰╮ ╭══╮╰╮
║ ║ ║ ║ ║ ║ ╰╮╰╮
║ ║ ║ ║ ║ ║ ║ ║
║ ║ ║ ║ ║ ║ ╭╯╭╯
║ ║ ║ ║ ║ ╰══╯╭╯
║ ║ ║ ║ ║ ╭═══╯
║ ║ ║ ║ ║ ║
╰╮╰╮ ╭╯╭╯ ║ ║
╰╮╰═╯╭╯ ╭╯ ╰╮
╰═══╯ ╰═══╯
\".*?\" 匹配不了換行符的,所以沒有 \"[^\"]*\" 好。
且我一直避免使用 ?: 這種預(yù)查功能是為了兼容 IE5.0
呵呵,加這個(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以上