MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-08-04, 21:00

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 9 篇文章 ] 
發表人 內容
文章發表於 : 2007-03-25, 16:23 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
假設我現在用了正則表達式取得了一系列的字串來取代一個文本:

文本:
var doc = 'Today is a good day.';

腳本:
var RE = /day|is/g;
var strings = doc.match(RE);
for(var i=0;i<doc.length;i++)
{
doc.replace(strings[i],'yes'+strings[i]);
}

結果:
Toyesyesday yesis a good day.

因為相同的day有兩次,但是每次使用replace它就會從最開始的地方取代
這種問題除了改善正則表達式之外要怎麼解決呢?


回頂端
Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.8.1.2) Gecko/20060601 Firefox/2.0.0.2 (Ubuntu-edgy)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-25, 22:41 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
var doc = 'Today is a good day'.replace(/(day|is)/g, '$1yes');
這樣是不是你要的結果?

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-26, 11:01 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
原來如此,$1~$9是給它匹配到的字串啊....
完全不知道= =

如果超過9個呢?
或是正則表達式使用了很複雜的巢狀條件的時候?


回頂端
Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.8.1.2) Gecko/20060601 Firefox/2.0.0.2 (Ubuntu-edgy)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-26, 14:37 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
legnaleurc 寫:
原來如此,$1~$9是給它匹配到的字串啊....
完全不知道= =

如果超過9個呢?
或是正則表達式使用了很複雜的巢狀條件的時候?

$nn 就行了。
我記得 replace() 的第二個參數還可以放函式來做進階代替。
用很複雜的巢狀條件還是會把每一對括號記住。
(x)
(?:x)
前者會有群組+記住的功能,後者只有群組的功能。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-26, 14:54 
http://developer.mozilla.org/en/docs/Co ... ng:replace
http://developer.mozilla.org/en/docs/Co ... cts:RegExp


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-26, 19:42 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
感謝解答

不過這部分是否會根據瀏覽器的不同而發生不同效果呢?
同樣的寫法在Firefox和Opera正常
但是IE只有部分作用
而Konqueror則是無法辦識$&


回頂端
Mozilla/5.0 (X11; U; Linux i686; zh-TW; rv:1.8.1.2) Gecko/20060601 Firefox/2.0.0.2 (Ubuntu-edgy)
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-27, 13:13 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
legnaleurc 寫:
感謝解答

不過這部分是否會根據瀏覽器的不同而發生不同效果呢?
同樣的寫法在Firefox和Opera正常
但是IE只有部分作用
而Konqueror則是無法辦識$&

唉,不同實作的痛苦XD

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-27, 18:56 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
kourge 寫:
唉,不同實作的痛苦XD


我比較好奇的是為什麼會發生這種事?
是因為瀏覽器支援的JavaScript不同?
還是對正則表達式的解釋有差距?(如Firefox會把全形空白歸入\s中,但是IE則視為不同的字元)

順便附上實作用的玩具網頁....
http://www.cs.ccu.edu.tw/~pwc94u/projects/codepage/
把C/C++ CODE貼上就會做標色動作....(沒做得很詳細就是了)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-03-28, 14:10 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
http://www.dreamprojections.com/SyntaxHighlighter/
http://www.mondotondo.com/aercolino/noteslog/?p=148

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 9 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 3 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群