Вам необходимо использовать только часть new RegExp()
при создании динамических регулярных выражений. Вы можете использовать литералы в другое время. / \ d + / является эквивалентом new RegExp("\\d+")
. Обратите внимание, что вы должны экранировать специальные символы при использовании последних.
Также примечательно, что String#match
возвращает ноль или массив. Это не очевидно в зависимости от поставляемых решений (parseInt(name.match(/\d+/), 10)
). Так уж получилось, что он передается в parseInt
в строку. ParseInt преобразует строковые значения в целые числа (когда это возможно).
name.match(/\d+/)[0]
/\d+/.exec(name)[0]
Эти два функционально идентичны в этом случае.
Другое совпадение, на которое вы ссылались (отрицательное совпадение), требует специального флага. Чтобы дублировать функциональность gsub, нужно указать, чтобы регулярное выражение применялось несколько раз с флагом g
.
'users[107][teacher_type]'.replace(/users\[|\]\[teacher_type\]/g,'')
Или, если бы вам пришлось по какой-то причине использовать new RegExp
, вы бы выполнили то же, что и выше, например:
'users [107] [teacher_type]'. Replace (новый RegExp ('users \ [| \] \ [teacher_type \]', 'g'), '')
Еще раз обратите внимание, как мне пришлось избежать всех обратных ударов. Центр разработчиков Mozilla - это хороший справочник , чтобы познакомиться с регулярными выражениями в javascript.