mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-06-16 18:29:57 +08:00
fix(angular.copy): clone regexp flags correctly
Closes #5781 Closes #8337
This commit is contained in:
committed by
Peter Bacon Darwin
parent
c03b9e5ec4
commit
86340a59bf
@@ -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);
|
||||
|
||||
@@ -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: /.*/
|
||||
|
||||
Reference in New Issue
Block a user