Ошибка компиляции для регулярного выражения с использованием JS223 Groovy script

#javascript #groovy #jmeter

#javascript #groovy #jmeter

Вопрос:

Я пытаюсь использовать Groovy Script в постпроцессоре JS223, чтобы вернуть «Town» и «Sacramento Document Repository» из строки ниже:

 documentRepository|Town|Sacramento Document Repository|A58D876A581D6A4F297703D9EA443775
  

Я протестировал следующие две части регулярного выражения в https://regex101.com / и они работают отлично:

 |(. ?)\ - returns "Town"
\|(. ?)| - returns "Sacramento Document Repository" 
  

Однако компиляция завершается сбоем для двух регулярных выражений в процессоре JS223:

 String REGEX1 = "|(. ?)\";
String REGEX2 = "\|(. ?)|";
  

Ошибка, которую я возвращаю, это:

 javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script85.groovy: 10: unexpected char: '' @ line 10, column 17.
   String REGEX = "|(. ?)\";
  

Я подозреваю, что проблема связана с экранированием обратной косой черты. Может кто-нибудь посоветовать, пожалуйста.

Ответ №1:

Вам нужно экранировать мета-символы в регулярных выражениях, чтобы изменить это:

 |(. ?)\
  

к этому:

 \|(. ?)\\
  

Также вы можете использовать оператор Find от Groovy и немного менее пугающий синтаксис.

Что-то вроде:

 def source = 'documentRepository|Town\|Sacramento Document Repository|A58D876A581D6A4F297703D9EA443775'

def matches = (source =~ '(?<=\|)[^|]*(?=\|)')
def town = matches[0]
def sacramento = matches[1]

log.info('Town: '   town)
log.info('Sacramento: '   sacramento)
  

ДЕМОНСТРАЦИЯ:

введите описание изображения здесь

Дополнительная информация:

Комментарии:

1. Снова в точку! Спасибо

Ответ №2:

Попробуйте использовать этот синтаксис:

  Pattern myRegex = ~/regex/
  

описано в этой статье:

Это не потребует какого-либо экранирования, поскольку это один из стандартных способов разделения строк, созданных для регулярного выражения.

Убедитесь, что вы импортировали пакет:

  import java.util.regex.*