推 LPH66:基本上括號只是分組用啊...除非該式子後面還有\1等 02/26 11:05
→ LPH66:另外你確定不是 <body> 和 </body> 的一對嗎? 02/26 11:05
> -------------------------------------------------------------------------- <
作者: xrancyma (…楊天淳…) 看板: RegExp
標題: Re: [問題] 請問括號的神奇作用
時間: Thu Feb 26 20:38:00 2009
推 LPH66:基本上括號只是分組用啊...除非該式子後面還有\1等 02/26 11:05
→ LPH66:另外你確定不是 <body> 和 </body> 的一對嗎? 02/26 11:05
在下知道 <body> 和 </body> 是一對的,
但是在下真的只是抓 <body> 而已。
網頁的原始碼有確認過了,確實是
<body> ... <body> .... </body> .. </body>
然而在下使用
/<body>/g.exec(htmlText)
與
/(<body>)/g.exec(htmlText)
確實產生不同的結果,令人相當納悶,而且嘗試了兩部電腦竟然都是這樣。
(作業環境都是 JavaScript in Firefox 3.0,但分別在 WinXP 和 Linux 下)
不知道是不是 Firefox 本身的問題,還是說在下對 RegExp 了解的不夠透徹。
--
諸君,在下氣質佳。爾等欲增氣質者,可向在下之高雅氣質學習與看齊。
雖在下之氣質不若四蝦那般高雅,卻仍足為汝輩鄉民之楷模與表率。
此外,
在下懂不少,無論是天文、地理、文學、歷史、社會、經濟、科學、哲學者,
無不涉略,爾等可稱在下為「略懂鈴」;另外,在下亦精通全球數種重要語言,
包括國語、台語、中文、閩南語、英文、華文、河洛語等,接能朗朗上口。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.56.185.102
推 bcse:會不會是網站原始碼真的這樣寫? 02/27 18:25
→ xrancyma:樓上,原網站是真的這樣寫。不過您似乎未看清在下問題。 02/28 01:19
→ xrancyma:原網站怎麼寫不重要,在下想要請教的是 RegExp 的問題。 02/28 01:19
→ xrancyma:在下想問的問題寫得應該蠻清楚的…麻煩高手指點一下,謝. 02/28 01:21
→ giacch: 結果哪裡不一樣..? 弄個例子出來比較好想... 02/28 03:28
→ grence:已經有例子了啊.... 02/28 20:57
> -------------------------------------------------------------------------- <
作者: xrancyma (…楊天淳…) 看板: RegExp
標題: Re: [問題] 請問括號的神奇作用
時間: Sat Feb 28 16:14:04 2009
推 bcse:會不會是網站原始碼真的這樣寫? 02/27 18:25
→ xrancyma:樓上,原網站是真的這樣寫。不過您似乎未看清在下問題。 02/28 01:19
→ xrancyma:原網站怎麼寫不重要,在下想要請教的是 RegExp 的問題。 02/28 01:19
→ xrancyma:在下想問的問題寫得應該蠻清楚的…麻煩高手指點一下,謝. 02/28 01:21
→ giacch: 結果哪裡不一樣..? 弄個例子出來比較好想... 02/28 03:28
在下似乎找到部份解答,但是礙於英文不通,所以想請教各位,
麻煩版友們幫我翻譯一下他是在寫什麼:
(x)
Matches 'x' and remembers the match. These are called capturing
parentheses. For example, /(foo)/ matches and remembers 'foo' in
"foo bar." The matched substring can be recalled from the resulting
array's elements [1], ..., [n].
(?:x)
Matches 'x' but does not remember the match. These are called
non-capturing parentheses. The matched substring can not be recalled
from the resulting array's elements [1], ..., [n].
看來括號似乎真有其用法…可惜在下英文真的太差…麻煩高手幫在下解釋一下,謝謝。
--
諸君,在下氣質佳。爾等欲增氣質者,可向在下之高雅氣質學習與看齊。
雖在下之氣質不若四蝦那般高雅,卻仍足為汝輩鄉民之楷模與表率。
此外,
在下懂不少,無論是天文、地理、文學、歷史、社會、經濟、科學、哲學者,
無不涉略,爾等可稱在下為「略懂鈴」;另外,在下亦精通全球數種重要語言,
包括國語、台語、中文、閩南語、英文、華文、河洛語等,接能朗朗上口。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.56.185.102
推 salagadoola:陣列[0]裡面是比對到的字串,[1]裡面是第一組括號 02/28 17:07
→ salagadoola:/<(b)(d)>/.exec("<bd>")會拿到[0]=<bd> [1]=b [2]=d 02/28 17:10
→ salagadoola:用/<(?:b)(d)>/.exec("<bd>")則是 陣列[0]=<bd> [1]=d 02/28 17:12
> -------------------------------------------------------------------------- <
作者: grence (多想兩分鐘 = =") 看板: RegExp
標題: Re: [問題] 請問括號的神奇作用
時間: Sat Feb 28 21:10:32 2009
※ 引述《xrancyma (…楊天淳…)》之銘言:
: 推 LPH66:基本上括號只是分組用啊...除非該式子後面還有\1等 02/26 11:05
: → LPH66:另外你確定不是 <body> 和 </body> 的一對嗎? 02/26 11:05
: 在下知道 <body> 和 </body> 是一對的,
: 但是在下真的只是抓 <body> 而已。
: 網頁的原始碼有確認過了,確實是
: <body> ... <body> .... </body> .. </body>
: 然而在下使用
: /<body>/g.exec(htmlText)
: 與
: /(<body>)/g.exec(htmlText)
弄成簡單的例子....
<script type='text/javascript'>
var htmlText="<body> ... <body> .... </body> .. </body>";
alert(/<body>/g.exec(htmlText));//<body>
alert(/(<body>)/g.exec(htmlText));//<body>,<body>
</script>
IE7 跟 FireFox的結果一樣,我也很好奇這兩個差在哪裡…
: 確實產生不同的結果,令人相當納悶,而且嘗試了兩部電腦竟然都是這樣。
: (作業環境都是 JavaScript in Firefox 3.0,但分別在 WinXP 和 Linux 下)
: 不知道是不是 Firefox 本身的問題,還是說在下對 RegExp 了解的不夠透徹。
--
我有誤解原po的問題嗎 囧a
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.199.26
推 xrancyma:您並沒有誤解。在下就是這個問題! 03/01 00:42
> -------------------------------------------------------------------------- <
作者: giacch (小a) 看板: RegExp
標題: Re: [問題] 請問括號的神奇作用
時間: Sat Feb 28 23:17:58 2009
※ 引述《grence (多想兩分鐘 = =")》之銘言:
: 弄成簡單的例子....
: <script type='text/javascript'>
: var htmlText="<body> ... <body> .... </body> .. </body>";
: alert(/<body>/g.exec(htmlText));//<body>
: alert(/(<body>)/g.exec(htmlText));//<body>,<body>
: </script>
: IE7 跟 FireFox的結果一樣,我也很好奇這兩個差在哪裡…
原以為 因為有兩個body 所以有加()的傳回兩個body 但看來不是...
而且傳回的都是第一個body
<script type='text/javascript'>
var htmlText="<bodya> ... <bodyb> .... </body> .. </body>";
alert(/(<body.?>)/g.exec(htmlText)); //<bodya>,<bodya>
alert(/<body.?>/g.exec(htmlText)); //<bodya>
</script>
就算只給一個body 有加()的還是會傳回 <body>,<body>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.172.163
→ giacch: Opera 02/28 23:21
推 xrancyma:感覺很像是BUG…該不會 IE 和 FF 的 BUG 都一樣吧? 03/01 00:40
補充一下...
<script type='text/javascript'>
var htmlText="<bodya> .. <bodyb> .... <bodyc>";
alert( "A: " + htmlText.match(/(<body.?>)/g) ); // A: <bodya>,<bodyb>,<bodyc>
alert( "B: " + htmlText.match(/(<body.?>)/g).length ); // B: 3
alert( "C: " + htmlText.match(/(<body.?>)/g)[0] ); // C: <bodya>
alert( "D: " + htmlText.match(/(<body.?>)/g)[1] ); // D: <bodyb>
alert( "E: " + htmlText.match(/(<body.?>)/g)[2] ); // E: <bodyc>
alert( "F: " + htmlText.match(/(<body.?>)/g)[3] ); // F: undefined
</script>
以下取自 http://www.w3schools.com/jsref/jsref_obj_regexp.asp
exec() Search a string for a specified value. Returns the found
value and remembers the position
match() Search a string for a specified value. Returns an array
of the found value(s)
( ) Finds the group of characters inside the parentheses
and stores the matched string
→ giacch: 爆... XD 03/01 01:09
※ 編輯: giacch 來自: 118.232.172.163 (03/01 01:17)
> -------------------------------------------------------------------------- <
作者: MichaelHsin (BBS之蟲) 看板: RegExp
標題: Re: [問題] 請問括號的神奇作用
時間: Sun Mar 1 03:59:24 2009
http://www.webreference.com/js/column5/methods.html
regex.exec() 傳回的 array,[0] 是 last match,[1], [2], ... 是 capture 的結果
至於 //g 的效果在前面的 code 裡都沒有出現,當然不會 match 到第二、三個 body(
"bodyb", "bodyc")。
請參考以下 code,就知道問題在哪裡:
===
var text = "blah bodya aaa bodyb bb bodyc";
while(ar = /(body.?)/g.exec(text))
{
document.write(ar.length, "<br/>");
document.write(ar.index, "<br/>");
document.write(ar.input, "<br/>");
document.write(ar[0], "<br/>");
document.write(ar[1], "<br/>");
document.write(ar[2], "<br/>");
document.write(ar, "<br/>");
}
===
---
話說我並是不會寫 js orz
--
「為什麼會有兩張鬼牌?」
『每次都讓它當鬼不是很可憐嗎?所以剩下的一張就是今天的鬼。
人類要是也能像這樣輕鬆配對,就省事了。
有時候8喜歡10,有時候K黏著2,有時候是黑桃同志糾纏不清。』
「你換掉鬼牌,就是在想這些麻煩事嗎?」
-- 安達充 《H2》
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.55
推 xrancyma:…感謝… 03/03 00:47