Ваша проблема не имеет ничего общего с комментариями.Вы просто смешиваете два разных способа создания объектов RegExp.
Когда вы создаете объект RegExp в коде JavaScript, вы либо записываете его как строковый литерал, передаваемый в конструктор RegExp, либо какрегулярное выражениеПоскольку строковые литералы поддерживают такие экранирующие последовательности, как \n
и \"
, любой фактический обратный слеш в строке также должен быть экранирован.Таким образом, всякий раз, когда вам нужно экранировать метасимвол регулярного выражения, например (
или +
, вы должны использовать две обратные косые черты, например:
var r0 = "^$|^(\\+?|(\\(\\+?[0-9]{1,3}\\))|)([ 0-9./-]|\\([ 0-9./-]+\\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9./-]|\\([ 0-9./-]+\\)))?$";
var regex0 = new RegExp(r0, "");
Косая черта не имеетособое значение, для регулярных выражений или строк.Единственная причина, по которой вам когда-либо приходится избегать косых черт, заключается в том, что они используются в качестве разделителя для литералов регулярных выражений .Вы используете обратную косую черту, чтобы избежать прямой косой черты, как вы используете метасимволы регулярных выражений, такие как \(
или \+
, или саму обратную косую черту: \\
.Вот регулярное выражение вашего регулярного выражения:
var regex1 = /^$|^(\+?|(\(\+?[0-9]{1,3}\))|)([ 0-9.\/-]|\([ 0-9.\/-]+\))+((x|X|((e|E)(x|X)(t|T)))([ 0-9.\/-]|\([ 0-9.\/-]+\)))?$/;