#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.*