Правильный способ присвоить RegEx переменной - использовать "new", поскольку это конструктор, но он также работает без него, как в этом примере:

var a = RegExp('abc');
var b = new RegExp('abc');
console.log(a, b, "abcd".match(a), "abcd".match(b), a == b);

Вывод: / abc / / abc / Array ["abc"] Array ["abc"] false

Итак, мой вопрос - нужно ли мне использовать «новый»?

С другой стороны, a == b не работает, так они как-то разные, потому что их объекты выглядят одинаково?

0
user1481126 10 Ноя 2020 в 05:13

2 ответа

Лучший ответ

Они полностью эквивалентны. См. спецификацию:

Конструктор RegExp:

создает и инициализирует новый объект RegExp при вызове как функции, а не конструктора. Таким образом, вызов функции RegExp (…) эквивалентен выражению создания объекта new RegExp (…) с теми же аргументами.

Тем не менее, использование конструктора без необходимости является плохой идеей, потому что это может привести к ошибкам и трудночитаемому коду из-за чтобы обратная косая черта должна быть двойным экранированием. По возможности используйте вместо них литералы регулярных выражений, для которых обратная косая черта не требует двойного экранирования.

3
CertainPerformance 10 Ноя 2020 в 02:16

Конструктор RegExp также можно использовать для копирования существующего регулярного выражения,

var r1 = /abc/
var r2 = new RegExp(r1)
0
York Chen 10 Ноя 2020 в 02:54