MozTW 討論區
https://forum.moztw.org/

[問題]多重替代字串的寫法
https://forum.moztw.org/viewtopic.php?f=13&t=18167
1 頁 (共 1 頁)

發表人:  legnaleurc [ 2007-03-25, 16:23 ]
文章主題 :  [問題]多重替代字串的寫法

假設我現在用了正則表達式取得了一系列的字串來取代一個文本:

文本:
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它就會從最開始的地方取代
這種問題除了改善正則表達式之外要怎麼解決呢?

發表人:  kourge [ 2007-03-25, 22:41 ]
文章主題 : 

var doc = 'Today is a good day'.replace(/(day|is)/g, '$1yes');
這樣是不是你要的結果?

發表人:  legnaleurc [ 2007-03-26, 11:01 ]
文章主題 : 

原來如此,$1~$9是給它匹配到的字串啊....
完全不知道= =

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

發表人:  kourge [ 2007-03-26, 14:37 ]
文章主題 : 

legnaleurc 寫:
原來如此,$1~$9是給它匹配到的字串啊....
完全不知道= =

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

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

發表人:  訪客 [ 2007-03-26, 14:54 ]
文章主題 : 

http://developer.mozilla.org/en/docs/Co ... ng:replace
http://developer.mozilla.org/en/docs/Co ... cts:RegExp

發表人:  legnaleurc [ 2007-03-26, 19:42 ]
文章主題 : 

感謝解答

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

發表人:  kourge [ 2007-03-27, 13:13 ]
文章主題 : 

legnaleurc 寫:
感謝解答

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

唉,不同實作的痛苦XD

發表人:  legnaleurc [ 2007-03-27, 18:56 ]
文章主題 : 

kourge 寫:
唉,不同實作的痛苦XD


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

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

發表人:  kourge [ 2007-03-28, 14:10 ]
文章主題 : 

http://www.dreamprojections.com/SyntaxHighlighter/
http://www.mondotondo.com/aercolino/noteslog/?p=148

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/