作者: Puff 時間: 2008-10-31 14:25 標題: JS 的 regexp 問題
最近在寫 WYSIWYG Editor
簡單的一條 expression 已經搞到我頭大
- /color=(.*)/gi
第一次執行呢條 expression 都冇無問題
- var $2 = 'color="#123456';
- var regex = /color=(.*)/gi;
- var color = regex.exec($2);
- alert(color); //color="#123456","#123456"
唔知點解好神奇地比我 null 我...
其他都冇事 得呢個有事
[ 本帖最後由 Puff 於 2008-10-31 14:28 編輯 ]
作者: Puff 時間: 2008-10-31 14:37
搵到個原因
用 Function 呢執行呢段 Script More the one time
除左第一次之外全部都係 null :funk:
----
IE7 冇事 :funk:
Firefox JS Bug...?
----
將 個 String , Expression 同 個color value 放左係 Function外
依家仲好笑...
單數有Result出
雙數null
[ 本帖最後由 Puff 於 2008-10-31 14:45 編輯 ]
作者: thinkpanda 時間: 2008-10-31 15:33
try this:
var regex = new RegExp("color=(.*)","gi");
作者: Puff 時間: 2008-10-31 15:35
已經試過 唔該曬
我頭先搵到解決方法
就係將 regexp.exec package成一個function
- function regex_match(regex, string)
- {
- var md = arguments[2] || '';
- return (new RegExp(regex, md)).exec(string);
- }
作者: hdvd-rom 時間: 2008-11-1 18:12
完全無你既問題..........
e.g.
var regex = new RegExp("color=(.*)","i");
regex.exec("color=#efefef");
regex.exec("color=#5f5f5f");
最簡單係用
String.match(pattern)
"color=#5f5f5f".match(/color=(.*)/i)[1]
問題出於"g"
[ 本帖最後由 hdvd-rom 於 2008-11-1 18:14 編輯 ]
作者: hdvd-rom 時間: 2008-11-1 19:31
舉另一個容易明白的例子
>>> var regex = new RegExp("color=(#[\\d\\w]{6}|\w{1,})","gi");
>>> regex.exec("color=#dfdfdfcolor=#dfdfef")
color=#dfdfdf,#dfdfdf
>>> regex.lastIndex
13
>>> regex.exec("color=#dfdfdfcolor=#dfdfef")
color=#dfdfef,#dfdfef
>>> regex.lastIndex
26
>>> regex.exec("color=#dfdfdfcolor=#dfdfef")
null
>>> regex.lastIndex
0
g會令regex每一次都停在它搜尋的位置,等下一次再由那位置再開始搜尋.
而你在這期間換了第二個字串,但regex的搜尋位置還停在之前一次搜尋位置.......那當然回傳NULL.........
g正確的用法應該是用Loop找完所有的值(直至回傳NULL),之後才轉去另一個字串....你只要一個值根本不用g
如果你真的勉強想用,每次用完就應該reset regex.lastIndex 去 0,

