JS 的 regexp 問題

最近在寫 WYSIWYG Editor

簡單的一條 expression 已經搞到我頭大
  1. /color=(.*)/gi
複製代碼
無錯 好簡單

第一次執行呢條 expression 都冇無問題
  1. var $2 = 'color="#123456';
  2. var regex = /color=(.*)/gi;
  3. var color = regex.exec($2);
  4. alert(color); //color="#123456","#123456"
複製代碼
第二次執行呢條 Expression
唔知點解好神奇地比我 null 我...


其他都冇事 得呢個有事

[ 本帖最後由 Puff 於 2008-10-31 14:28 編輯 ]

搵到個原因

用 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 編輯 ]

TOP

try this:

var regex = new RegExp("color=(.*)","gi");

TOP

原帖由 thinkpanda 於 2008-10-31 15:33 發表
try this:

var regex = new RegExp("color=(.*)","gi");

已經試過 唔該曬

我頭先搵到解決方法

就係將 regexp.exec package成一個function
  1. function regex_match(regex, string)
  2. {
  3.         var md = arguments[2] || '';
  4.         return (new RegExp(regex, md)).exec(string);
  5. }
複製代碼
咁先得

TOP

完全無你既問題..........
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 編輯 ]

TOP

舉另一個容易明白的例子
>>> 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,

TOP