diff --git a/src/Angular.js b/src/Angular.js index 4462c9f24968..5c73e71cdde5 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -775,7 +775,8 @@ function copy(source, destination, stackSource, stackDest) { } else if (isDate(source)) { destination = new Date(source.getTime()); } else if (isRegExp(source)) { - destination = new RegExp(source.source); + destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]); + destination.lastIndex = source.lastIndex; } else if (isObject(source)) { var emptyObject = Object.create(Object.getPrototypeOf(source)); destination = copy(source, emptyObject, stackSource, stackDest); diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 76a375735e64..540098353cf6 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -55,6 +55,20 @@ describe('angular', function() { expect(copy(re) === re).toBeFalsy(); }); + it("should copy RegExp with flags", function() { + var re = new RegExp('.*', 'gim'); + expect(copy(re).global).toBe(true); + expect(copy(re).ignoreCase).toBe(true); + expect(copy(re).multiline).toBe(true); + }); + + it("should copy RegExp with lastIndex", function() { + var re = /a+b+/g; + var str = 'ab aabb'; + expect(re.exec(str)[0]).toEqual('ab'); + expect(copy(re).exec(str)[0]).toEqual('aabb'); + }); + it("should deeply copy literal RegExp", function() { var objWithRegExp = { re: /.*/