JREPL - это гибридный JScript / batch, использующий CSCRIPT - хост сценария Windows.
CSCRIPT имеет внутреннее ограничение, запрещающее передачу литералов в двойных кавычках в качестве параметров - не существует escape-последовательности CSCRIPT, которая включает "
литерал.
Чтобы включить литерал "
в строку запроса, вместо него можно использовать \x22
. Все стандартные escape-последовательности JScript могут использоваться в строке запроса. По умолчанию escape-последовательности не распознаются в строке замены.
Но вы хотите, чтобы в вашей строке замены был литерал кавычки. Для этого требуется опция /XSEQ
, чтобы вы могли использовать расширенную escape-последовательность JREPL, равную \q
. Существенным преимуществом этой опции является то, что вы также можете использовать расширенные escape-последовательности в строке замены. Вы также можете использовать \x22
для поиска и замены строк, если хотите, но я считаю, \q
гораздо проще запомнить.
У вас есть еще одна потенциальная проблема - команда CALL удваивает все цитируемые символы, поэтому [^()]
(любой символ, отличный от (
или )
) становится [^^()]
(любой символ, отличный от ^
, (
или )
). Это определенно не то, что вы хотите. По этой причине я добавил расширенную escape-последовательность \c
= ^
.
Поэтому я считаю, что следующий результат даст ожидаемый результат:
CALL .\framework\config\JREPL.BAT "(Error)+\(([\c()]*|\(([\c()]*|\([\c()]*\))*\))*\)" "Error(\q\q)" /xseq /f .\dist\index.html /o -
К вашему сведению - Эффект ^
начало привязки строки не повреждается удвоением каретки - вам не нужна escape-последовательность \c
для начала привязки строки, потому что "^MatchStringBeginning"
и "^^MatchStringBeginning"
дают идентичные результаты регулярного выражения.
Вы можете получить более подробную информацию о расширенных escape-последовательностях, введя jrepl /?/xseq
или jrepl /??/xseq
для справки по страницам.
>jrepl /?/xseq
/XSEQ - Enables extended escape sequences for both Search strings and
Replacement strings, with support for the following sequences:
\\ - Backslash
\b - Backspace
\c - Caret (^)
\f - Formfeed
\n - Newline
\q - Quote (")
\r - Carriage Return
\t - Horizontal Tab
\v - Vertical Tab
\xnn - Extended ASCII byte code expressed as 2 hex digits nn.
The code is mapped to the correct Unicode code point,
depending on the chosen character set. If used within
a Find string, then the input character set is used. If
within a Replacement string, then the output character
set is used. If the selected character set is invalid or
not a single byte character set, then \xnn is treated as
a Unicode code point. Note that extended ASCII character
class ranges like [\xnn-\xnn] should not be used because
the intended range likely does not map to a contiguous
set of Unicode code points - use [\x{nn-mm}] instead.
\x{nn-mm} - A range of extended ASCII byte codes for use within
a regular expression character class expression. The
The min value nn and max value mm are expressed as hex
digits. The range is automatically expanded into the
full set of mapped Unicode code points. The character
set mapping rules are the same as for \xnn.
\x{nn,CharSet} - Same as \xnn, except explicitly uses CharSet
character set mapping.
\x{nn-mm,CharSet} - Same as \x{nn-mm}, except explicitly uses
CharSet character set mapping.
\unnnn - Unicode code point expressed as 4 hex digits nnnn.
\u{N} - Any Unicode code point where N is 1 to 6 hex digits
JREPL automatically creates an XBYTES.DAT file containing all 256
possible byte codes. The XBYTES.DAT file is preferentially created
in "%ALLUSERSPROFILE%\JREPL\" if at all possible. Otherwise the
file is created in "%TEMP%\JREPL\" instead. JREPL uses the file
to establish the correct \xnn byte code mapping for each character
set. Once created, successive runs reuse the same XBYTES.DAT file.
If the file gets corrupted, then use the /XBYTES option to force
creation of a new XBYTES.DAT file. If JREPL cannot create the file
for any reason, then JREPL silently defaults to using pre v7.4
behavior where /XSEQ \xnn is interpreted as Windows-1252. Creation
of XBYTES.DAT requires either CERTUTIL.EXE or ADO. It is possible
that both may be missing from an XP machine.
Without the /XSEQ option, only standard JSCRIPT escape sequences
\\, \b, \f, \n, \r, \t, \v, \xnn, \unnnn are available for the
search strings. And the \xnn sequence represents a unicode
code point, not extended ASCII.
Extended escape sequences are supported even when the /L option
is used. Both Search and Replace support all of the extended
escape sequences if both the /XSEQ and /L options are combined.
Extended escape sequences are not applied to JScript code when
using any of the /Jxxx options. Use the decode() function if
extended escape sequences are needed within the code.
Окончательный ответ для этого состоит в том, чтобы экранировать кавычки и обратную косую черту как \"
AND \\
при использовании CALL в Webpack-shell-plugin.
'call "./framework/config/JREPL.BAT" \"(Error)\\(([\\c()]*|\\(([\\c()]*|\\([\\c()]*\\))*\\))*\\)\" \"Error(\\q\\q)\" /xseq /f ./dist/index.html /o ./dist/indexFinal.html'