Browse Source

fixed several match() when 'g' flag is set (fixed issue #836)

Nicolas Cannasse 13 năm trước cách đây
mục cha
commit
4acf173b35
3 tập tin đã thay đổi với 10 bổ sung0 xóa
  1. 1 0
      std/flash/_std/EReg.hx
  2. 1 0
      std/js/_std/EReg.hx
  3. 8 0
      tests/unit/TestEReg.hx

+ 1 - 0
std/flash/_std/EReg.hx

@@ -33,6 +33,7 @@
 	}
 
 	public function match( s : String ) : Bool {
+		if( r.global ) r.lastIndex = 0;
 		result = r.exec(s);
 		return (result != null);
 	}

+ 1 - 0
std/js/_std/EReg.hx

@@ -33,6 +33,7 @@
 	}
 
 	public function match( s : String ) : Bool {
+		if( r.global ) r.lastIndex = 0;
 		r.m = r.exec(s);
 		r.s = s;
 		return (r.m != null);

+ 8 - 0
tests/unit/TestEReg.hx

@@ -46,6 +46,14 @@ class TestEReg extends Test {
 		f( ~/\\$/.match('\\$') );
 		t( ~/\\\$/.match('\\$') );
 		
+		// check that global flag does not prevent matching several times (lastIndex in JS/Flash)
+		var r = ~/cat/g;
+		t( r.match("catneko") );
+		t( r.match("catneko") );
+		
+		eq( ~/a+/.replace("aabbccaa", "x"), "xbbccaa" );
+		eq( ~/a+/g.replace("aabbccaa", "x"), "xbbccx" );
+		
 		#end
 	}