Skip to content

Commit 447926d

Browse files
committed
refactor(RegExp): use /.../ to create RegExp literal
fixes angular#2691
1 parent 258da88 commit 447926d

File tree

17 files changed

+62
-84
lines changed

17 files changed

+62
-84
lines changed

modules/angular2/src/change_detection/parser/parser.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
import {Injectable} from 'angular2/src/di/decorators';
2-
import {
3-
isBlank,
4-
isPresent,
5-
BaseException,
6-
StringWrapper,
7-
RegExpWrapper
8-
} from 'angular2/src/facade/lang';
2+
import {isBlank, isPresent, BaseException, StringWrapper} from 'angular2/src/facade/lang';
93
import {ListWrapper, List} from 'angular2/src/facade/collection';
104
import {
115
Lexer,
@@ -52,7 +46,7 @@ import {
5246

5347
var _implicitReceiver = new ImplicitReceiver();
5448
// TODO(tbosch): Cannot make this const/final right now because of the transpiler...
55-
var INTERPOLATION_REGEXP = RegExpWrapper.create('\\{\\{(.*?)\\}\\}');
49+
var INTERPOLATION_REGEXP = /\{\{(.*?)\}\}/g;
5650

5751
@Injectable()
5852
export class Parser {

modules/angular2/src/debug/debug_element_view_listener.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import {
2-
CONST_EXPR,
3-
isPresent,
4-
NumberWrapper,
5-
StringWrapper,
6-
RegExpWrapper
7-
} from 'angular2/src/facade/lang';
1+
import {CONST_EXPR, isPresent, NumberWrapper, StringWrapper} from 'angular2/src/facade/lang';
82
import {MapWrapper, Map, ListWrapper, List} from 'angular2/src/facade/collection';
93
import {Injectable, bind, Binding} from 'angular2/di';
104
import {AppViewListener} from 'angular2/src/core/compiler/view_listener';
@@ -16,7 +10,6 @@ import {DebugElement} from './debug_element';
1610
const NG_ID_PROPERTY = 'ngid';
1711
const INSPECT_GLOBAL_NAME = 'ngProbe';
1812

19-
var NG_ID_SEPARATOR_RE = RegExpWrapper.create('#');
2013
var NG_ID_SEPARATOR = '#';
2114

2215
// Need to keep the views in a global Map so that multiple angular apps are supported
@@ -34,7 +27,7 @@ function _setElementId(element, indices: List<number>) {
3427
function _getElementId(element): List<number> {
3528
var elId = DOM.getData(element, NG_ID_PROPERTY);
3629
if (isPresent(elId)) {
37-
return ListWrapper.map(StringWrapper.split(elId, NG_ID_SEPARATOR_RE),
30+
return ListWrapper.map(elId.split(NG_ID_SEPARATOR),
3831
(partStr) => NumberWrapper.parseInt(partStr, 10));
3932
} else {
4033
return null;

modules/angular2/src/render/api.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,6 @@ export class ProtoViewDto {
130130
}
131131
}
132132

133-
// group 1: property from "[property]"
134-
// group 2: event from "(event)"
135-
// group 3: action from "@action"
136-
var hostRegExp = RegExpWrapper.create('^(?:(?:\\[([^\\]]+)\\])|(?:\\(([^\\)]+)\\))|(?:@(.+)))$');
137-
138133
export class DirectiveMetadata {
139134
static get DIRECTIVE_TYPE() { return 0; }
140135
static get COMPONENT_TYPE() { return 1; }
@@ -156,6 +151,10 @@ export class DirectiveMetadata {
156151
hostProperties: Map<string, string>;
157152
hostAttributes: Map<string, string>;
158153
hostActions: Map<string, string>;
154+
// group 1: "property" from "[property]"
155+
// group 2: "event" from "(event)"
156+
// group 3: "action" from "@action"
157+
private static _hostRegExp = /^(?:(?:\[([^\]]+)\])|(?:\(([^\)]+)\))|(?:@(.+)))$/g;
159158

160159
constructor({id, selector, compileChildren, events, hostListeners, hostProperties, hostAttributes,
161160
hostActions, properties, readAttributes, type, callOnDestroy, callOnChange,
@@ -225,7 +224,7 @@ export class DirectiveMetadata {
225224

226225
if (isPresent(host)) {
227226
MapWrapper.forEach(host, (value: string, key: string) => {
228-
var matches = RegExpWrapper.firstMatch(hostRegExp, key);
227+
var matches = RegExpWrapper.firstMatch(DirectiveMetadata._hostRegExp, key);
229228
if (isBlank(matches)) {
230229
hostAttributes.set(key, value);
231230
} else if (isPresent(matches[1])) {

modules/angular2/src/render/dom/compiler/property_binding_parser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import {dashCaseToCamelCase} from '../util';
1717
// Group 6 = idenitifer inside [()]
1818
// Group 7 = idenitifer inside []
1919
// Group 8 = identifier inside ()
20-
var BIND_NAME_REGEXP = RegExpWrapper.create(
21-
'^(?:(?:(?:(bind-)|(var-|#)|(on-)|(bindon-))(.+))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$');
20+
var BIND_NAME_REGEXP =
21+
/^(?:(?:(?:(bind-)|(var-|#)|(on-)|(bindon-))(.+))|\[\(([^\)]+)\)\]|\[([^\]]+)\]|\(([^\)]+)\))$/g;
2222
/**
2323
* Parses the property bindings on a single element.
2424
*/

modules/angular2/src/render/dom/compiler/style_inliner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ function _wrapInMediaRule(css: string, query: string): string {
131131
return (isBlank(query)) ? css : `@media ${query} {\n${css}\n}`;
132132
}
133133

134-
var _importRe = RegExpWrapper.create('@import\\s+([^;]+);');
134+
var _importRe = /@import\s+([^;]+);/g;
135135
var _urlRe = RegExpWrapper.create(
136136
'url\\(\\s*?[\'"]?([^\'")]+)[\'"]?|' + // http://github.com/url(url) or url(http://github.com/'url') or url(http://github.com/"url")
137137
'[\'"]([^\'")]+)[\'"]' // "url" or 'url'
138138
);
139-
var _mediaQueryRe = RegExpWrapper.create('[\'"][^\'"]+[\'"]\\s*\\)?\\s*(.*)');
139+
var _mediaQueryRe = /['"][^'"]+['"]\s*\)?\s*(.*)/g;

modules/angular2/src/render/dom/compiler/style_url_resolver.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// https://github.com/webcomponents/webcomponentsjs/blob/master/src/HTMLImports/path.js
33

44
import {Injectable} from 'angular2/di';
5-
import {RegExp, RegExpWrapper, StringWrapper} from 'angular2/src/facade/lang';
5+
import {RegExp, StringWrapper} from 'angular2/src/facade/lang';
66
import {UrlResolver} from 'angular2/src/services/url_resolver';
77

88
/**
@@ -31,6 +31,6 @@ export class StyleUrlResolver {
3131
}
3232
}
3333

34-
var _cssUrlRe = RegExpWrapper.create('(url\\()([^)]*)(\\))');
35-
var _cssImportRe = RegExpWrapper.create('(@import[\\s]+(?!url\\())[\'"]([^\'"]*)[\'"](.*;)');
36-
var _quoteRe = RegExpWrapper.create('[\'"]');
34+
var _cssUrlRe = /(url\()([^)]*)(\))/g;
35+
var _cssImportRe = /(@import[\s]+(?!url\())['"]([^'"]*)['"](.*;)/g;
36+
var _quoteRe = /['"]/g;

modules/angular2/src/render/dom/shadow_dom/shadow_css.ts

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -403,8 +403,8 @@ export class ShadowCss {
403403
}
404404

405405
_makeScopeMatcher(scopeSelector: string): RegExp {
406-
var lre = RegExpWrapper.create('\\[');
407-
var rre = RegExpWrapper.create('\\]');
406+
var lre = /\[/g;
407+
var rre = /\]/g;
408408
scopeSelector = StringWrapper.replaceAll(scopeSelector, lre, '\\[');
409409
scopeSelector = StringWrapper.replaceAll(scopeSelector, rre, '\\]');
410410
return RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
@@ -429,7 +429,7 @@ export class ShadowCss {
429429
// return a selector with [name] suffix on each simple selector
430430
// e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]
431431
_applyStrictSelectorScope(selector: string, scopeSelector: string): string {
432-
var isRe = RegExpWrapper.create('\\[is=([^\\]]*)\\]');
432+
var isRe = /\[is=([^\]]*)\]/g;
433433
scopeSelector = StringWrapper.replaceAllMapped(scopeSelector, isRe, (m) => m[1]);
434434
var splits = [' ', '>', '+', '~'], scoped = selector, attrName = '[' + scopeSelector + ']';
435435
for (var i = 0; i < splits.length; i++) {
@@ -440,7 +440,7 @@ export class ShadowCss {
440440
var t = StringWrapper.replaceAll(p.trim(), _polyfillHostRe, '');
441441
if (t.length > 0 && !ListWrapper.contains(splits, t) &&
442442
!StringWrapper.contains(t, attrName)) {
443-
var re = RegExpWrapper.create('([^:]*)(:*)(.*)');
443+
var re = /([^:]*)(:*)(.*)/g;
444444
var m = RegExpWrapper.firstMatch(re, t);
445445
if (isPresent(m)) {
446446
p = m[1] + attrName + m[2] + m[3];
@@ -463,10 +463,10 @@ export class ShadowCss {
463463
// TODO(sorvell): Safari cssom incorrectly removes quotes from the content
464464
// property. (https://bugs.webkit.org/show_bug.cgi?id=118045)
465465
// don't replace attr rules
466-
var attrRe = RegExpWrapper.create('[\'"]+|attr');
466+
var attrRe = /['"]+|attr/g;
467467
if (rule.style.content.length > 0 &&
468468
!isPresent(RegExpWrapper.firstMatch(attrRe, rule.style.content))) {
469-
var contentRe = RegExpWrapper.create('content:[^;]*;');
469+
var contentRe = /content:[^;]*;/g;
470470
cssText =
471471
StringWrapper.replaceAll(cssText, contentRe, 'content: \'' + rule.style.content + '\';');
472472
}
@@ -487,13 +487,11 @@ export class ShadowCss {
487487
return cssText;
488488
}
489489
}
490-
491-
var _cssContentNextSelectorRe = RegExpWrapper.create(
492-
'polyfill-next-selector[^}]*content:[\\s]*?[\'"](.*?)[\'"][;\\s]*}([^{]*?){', 'im');
493-
var _cssContentRuleRe =
494-
RegExpWrapper.create('(polyfill-rule)[^}]*(content:[\\s]*[\'"](.*?)[\'"])[;\\s]*[^}]*}', 'im');
495-
var _cssContentUnscopedRuleRe = RegExpWrapper.create(
496-
'(polyfill-unscoped-rule)[^}]*(content:[\\s]*[\'"](.*?)[\'"])[;\\s]*[^}]*}', 'im');
490+
var _cssContentNextSelectorRe =
491+
/polyfill-next-selector[^}]*content:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim;
492+
var _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim;
493+
var _cssContentUnscopedRuleRe =
494+
/(polyfill-unscoped-rule)[^}]*(content:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim;
497495
var _polyfillHost = '-shadowcsshost';
498496
// note: :host-context pre-processed to -shadowcsshostcontext.
499497
var _polyfillHostContext = '-shadowcsscontext';
@@ -504,18 +502,21 @@ var _cssColonHostRe = RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, '
504502
var _cssColonHostContextRe = RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');
505503
var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';
506504
var _shadowDOMSelectorsRe = [
507-
RegExpWrapper.create('>>>'),
508-
RegExpWrapper.create('::shadow'),
509-
RegExpWrapper.create('::content'),
505+
/>>>/g,
506+
/::shadow/g,
507+
/::content/g,
510508
// Deprecated selectors
511-
RegExpWrapper.create('/deep/'), // former >>>
512-
RegExpWrapper.create('/shadow-deep/'), // former /deep/
513-
RegExpWrapper.create('/shadow/'), // former ::shadow
509+
// TODO(vicb): see https://github.com/angular/clang-format/issues/16
510+
// clang-format off
511+
/\/deep\//g, // former >>>
512+
/\/shadow-deep\//g, // former /deep/
513+
/\/shadow\//g, // former ::shadow
514+
// clanf-format on
514515
];
515516
var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
516517
var _polyfillHostRe = RegExpWrapper.create(_polyfillHost, 'im');
517-
var _colonHostRe = RegExpWrapper.create(':host', 'im');
518-
var _colonHostContextRe = RegExpWrapper.create(':host-context', 'im');
518+
var _colonHostRe = /:host/gim;
519+
var _colonHostContextRe = /:host-context/gim;
519520

520521
function _cssToRules(cssText: string) {
521522
return DOM.cssToRules(cssText);

modules/angular2/src/render/dom/util.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {StringWrapper, RegExpWrapper, isPresent} from 'angular2/src/facade/lang';
1+
import {StringWrapper, isPresent} from 'angular2/src/facade/lang';
22

33
export const NG_BINDING_CLASS_SELECTOR = '.ng-binding';
44
export const NG_BINDING_CLASS = 'ng-binding';
55

66
export const EVENT_TARGET_SEPARATOR = ':';
77

8-
var CAMEL_CASE_REGEXP = RegExpWrapper.create('([A-Z])');
9-
var DASH_CASE_REGEXP = RegExpWrapper.create('-([a-z])');
8+
var CAMEL_CASE_REGEXP = /([A-Z])/g;
9+
var DASH_CASE_REGEXP = /-([a-z])/g;
1010

1111
export function camelCaseToDashCase(input: string): string {
1212
return StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP,

modules/angular2/src/router/path_recognizer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ class StarSegment {
7878
}
7979

8080

81-
var paramMatcher = RegExpWrapper.create("^:([^\/]+)$");
82-
var wildcardMatcher = RegExpWrapper.create("^\\*([^\/]+)$");
81+
var paramMatcher = /^:([^\/]+)$/g;
82+
var wildcardMatcher = /^\*([^\/]+)$/g;
8383

8484
function parsePathString(route: string): StringMap<string, any> {
8585
// normalize route as not starting with a "/". Recognition will

modules/angular2/src/test_lib/utils.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,11 @@ export function containsRegexp(input: string): RegExp {
4949
}
5050

5151
export function normalizeCSS(css: string): string {
52-
css = StringWrapper.replaceAll(css, RegExpWrapper.create('\\s+'), ' ');
53-
css = StringWrapper.replaceAll(css, RegExpWrapper.create(':\\s'), ':');
54-
css = StringWrapper.replaceAll(css, RegExpWrapper.create("\\'"), '"');
55-
css = StringWrapper.replaceAllMapped(css, RegExpWrapper.create('url\\(\\"(.+)\\"\\)'),
56-
(match) => `url(http://github.com/%3Cspan%20class=pl-s1%3E%3Cspan%20class=pl-kos%3E$%7B%3C/span%3E%3Cspan%20class=pl-s1%3Ematch%3C/span%3E%3Cspan%20class=pl-kos%3E[%3C/span%3E%3Cspan%20class=pl-c1%3E1%3C/span%3E%3Cspan%20class=pl-kos%3E]%3C/span%3E%3Cspan%20class=pl-kos%3E%7D%3C/span%3E%3C/span%3E)`);
57-
css = StringWrapper.replaceAllMapped(css, RegExpWrapper.create('\\[(.+)=([^"\\]]+)\\]'),
52+
css = StringWrapper.replaceAll(css, /\s+/g, ' ');
53+
css = StringWrapper.replaceAll(css, /:\s/g, ':');
54+
css = StringWrapper.replaceAll(css, /'"/g, '"');
55+
css = StringWrapper.replaceAllMapped(css, /url\(\"(.+)\\"\)/g, (match) => `url(http://github.com/%3Cspan%20class=pl-s1%3E%3Cspan%20class=pl-kos%3E$%7B%3C/span%3E%3Cspan%20class=pl-s1%3Ematch%3C/span%3E%3Cspan%20class=pl-kos%3E[%3C/span%3E%3Cspan%20class=pl-c1%3E1%3C/span%3E%3Cspan%20class=pl-kos%3E]%3C/span%3E%3Cspan%20class=pl-kos%3E%7D%3C/span%3E%3C/span%3E)`);
56+
css = StringWrapper.replaceAllMapped(css, /\[(.+)=([^"\]]+)\]/g,
5857
(match) => `[${match[1]}="${match[2]}"]`);
5958
return css;
6059
}

0 commit comments

Comments
 (0)