Skip to content

Commit

Permalink
fix(angular.copy): clone regexp flags correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
shahata authored and petebacondarwin committed Jul 25, 2014
1 parent c03b9e5 commit cfc7b9d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/Angular.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
14 changes: 14 additions & 0 deletions test/AngularSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: /.*/
Expand Down

0 comments on commit cfc7b9d

Please sign in to comment.