Ошибка регулярного выражения: что не так с этим регулярным выражением? - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь написать регулярное выражение для Java-программы, которое соответствует всем фрагментам кода JS, например:

<script> window.box||((box=function(){box.q.push(arguments);}).q=[]); box('ns:foo','event', 'bar', {delimiter:'null',display_name:'baz',id:'12345',name:'attr_1',value:'attr_val',event_type:'abc'}); </script>

Это то, что я до сих пор:

private final static String SCRIPT_CODE_REG_EXP = "(^<script>\\n.*\\n box(\\('ns:.*','event', '%s',)(\\{%s\\}){1}\\)(;\\n</script>$)";

Значения JSON {разделитель: 'null', display_name: 'baz', id: '12345', имя: 'attr_1', значение: 'attr_val', тип события: 'abc'} будет передано как часть String.format ().

Я не могу сопоставить фрагмент JS с этим регулярным выражением.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Попробуйте это регулярное выражение:

^<script>\n.*\n  box\('ns:.*','event', '%s', \{%s\}\);\n</script>$

Java:

String patternString = "^<script>\\n.*\\n  box\\('ns:.*','event', '%s', \\{%s\\}\\);\\n</script>$";

Изменения

  1. Удалены ненужные или неправильно помещенные скобки
  2. Добавлен пропущенный пробел после '%s',
  3. Удален ненужный квантификатор {1}

Из вашего вопроса не совсем ясно, но убедитесь, что вы пропустили два объекты для форматирования, так как существует два спецификатора формата.

Обязательно quote значений перед вставкой их в шаблон.


Youможет использовать такие инструменты, как regex101 для тестирования шаблонов регулярных выражений, однако он не поддерживает нотацию регулярных выражений Java, поэтому некоторые функции могут быть недоступны или только в другой форме.

0 голосов
/ 28 декабря 2018

Если вы посмотрите на это регулярное выражение, java интерпретирует его как:

(^<script>\n.*\n  box(\('ns:.*','event', '%s',)(\{%s\}){1}\)(;\n</script>$)
^... The opening parenthesis is without a corresponding closing parenthesis.

Вот почему это регулярное выражение выдает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...