Регулярное выражение, чтобы совпадать с буквальной скобкой

Я считаю string этим:

var text = 12.34 a 12.34(01-01-0001);

Но у меня есть следующая проблема. Применив к нему регулярное выражение:

var patron = new RegExp('\\d{2}\.\\d{2}\\sa\\s\\d{2}\.\\d{2}\\(\\d{2}-\\d{2}-\\d{4}\\)');

и звонить в:

patron.test(texto);

Этот возвращается false.

Я подтвердил, что ошибка дает это мне из-за скобок, а именно, если я снимаю скобки string (переменная text) и конечно регулярного выражения, язык сценариев JavaScript оценивает это мне в true. Также я подтвердил, что, если использовал главный файл:

var patron = new RegExp('\\d{2}\.\\d{2}\\sa\\s\\d{2}\.\\d{2}\\(\\d{2}-\\d{2}-\\d{4}');

А именно, я опускаю конечную скобку в главном файле, да он оценивает это мне в true.

Кто-то знает почему?

1
задан 28.07.2017, 17:20
2 ответа

Восток возвращается false.

не является верным. Из-за mГЎs, что были какие-то вещи, чтобы исправлять, ты expresiГіn estГЎ совпадая с текстом, и patron.test(texto) возврати true. А следовательно deberГ-схвати проверять оставшуюся часть тебя cГіdigo. Например, не estГЎs, используя кавычки, объявив переменную texto.

regex может выражать как:

var patron = /\d{2}\.\d{2} a \d{2}\.\d{2}\(\d{2}-\d{2}-\d{4}\)/;
  • не необходим перемещать это как string, когда он выражает между брусками.
  • \s встречается с местом в мишени (место, tab, enter, я прыгаю lГ-nea или прыгаю pГЎgina), но для того, чтобы он совпал с местом, sГіlo он нужен использовать место.

Сейчас, если действительно тебе интересно перемещать это строителя RegExp() как string, тогда нужен убегать каждый брусок. Это не что-то regex, а форма, в которой язык сценариев JavaScript интерпретирует string. Например, это была ошибка перемещать '\.', так как Javascript удаляет брусок, интерпретировав это как string, способствуя тому, чтобы он совпал с любым характером (не sГіlo точка). А именно, твой regex остался лучше asГ-:

var patron = new RegExp('\\d{2}\\.\\d{2} a \\d{2}\\.\\d{2}\\(\\d{2}-\\d{2}-\\d{4}\\)'),
    texto = '12.34 a 12.34(01-01-0001)',
    resultado;
        
resultado = patron.test(texto);
    
console.log('Resultado: ', resultado);

, Но действительно нет мотива делать это этой формой. Он много mГЎs просто перемещать это без строителя:

var patron = /\d{2}\.\d{2} a \d{2}\.\d{2}\(\d{2}-\d{2}-\d{4}\)/,
    texto = '12.34 a 12.34(01-01-0001)',
    resultado;
        
resultado = patron.test(texto);
    
console.log('Resultado: ', resultado);


я опускаю parГ©ntesis конец в patrГіn, если я это evalГєa в true.

, Потому что регулярные выражения совпадают с любой частью текста, из-за mГЎs, что была sГіlo часть в способе текста. Если бы ты захотел ограничить это, что совпал sГіlo с полным string, deberГ-схвати определять, что он совпал с:

  • ^ - Начало текста.
  • $ - Конец текста.

А именно:

var patron = /^\d{2}\.\d{2} a \d{2}\.\d{2}\(\d{2}-\d{2}-\d{4}\)$/;

И эта expresiГіn не будет совпадать, если опускается часть, или если у текста есть mГЎs символы раньше или despuГ©s.

5
ответ дан 24.11.2019, 07:11

Ты должен убегать такие скобки \(, которые значат, что он это берет literial:

var expression = /\d+\.\d+\s+\w+\s+\d+\.\d+\([\d-]+\)/;

console.log(expression.test("12.34 a 12.34(01-01-0001)"));

console.log(expression.test("12.34 a 12.34(01-00001-0000000001)"));
3
ответ дан 24.11.2019, 07:11

Теги

Похожие вопросы