Creating regular expression patterns
About this task
In this example, we are trying to create a regular expression pattern in JavaScript™ to look for the last value in the response, matching on the fourth match group.
Here is one implementation:
// the pattern used to extract the amount (found in match group 4 ($4)
var pattern = "COMP\\x3B(.*?)\\x3A(.*?)\\x3B(.*?)\\x3B(.*?)($|\\)"
// The weba.s.products hit attribute is the pattern found in the response.
// We want the last one in the response.
// the amount is found in the fourth match group of the last match.
// var $amt = /$pattern/.exec
// ($P["APP.P__H_WEBA_S_PRODUCTS__HA__634261087410339197"].lastValue()).$4;
In the above example, two methods are called in a single
line: .exec()
and lastValue()
. However,
if the exec()
method cannot find a match, it returns
a null value, which generates a runtime error. Determining the source
of this error is not straightforward.
To simplify debugging issues, Discover recommends breaking up the above JavaScript into multiple variable assignments, as in the following example:
//Define the regular expression
var pattern = "COMP\\x3B(.*?)\\x3A(.*?)\\x3B(.*?)\\x3B(.*?)($|\\)";
//Define the search buffer
var $search_buffer =
$P["APP.P__H_WEBA_S_PRODUCTS__HA__634261087410339197"].lastValue();
//Construct the RegEx object (If the pattern is invalid, this statement fails)
var $regex = new RegExp(pattern);
//Returns [FullMatch, Group1, Group2, Group3, Group4]
var $match = $regex.exec($search_buffer);
//Check to see if the match was successful and ensure that the match group is
//available
if($match && $match.length > 4) {
var $amt = $match[4];
}
The above code separates the regular expression checks into simpler declarations, which isolate the regex definition, pattern definition, regex compilation, and regex execution. Using simpler declarations:
Procedure
- Simplifies automated and manual JavaScript validation
- Simplifies debugging issues
Results
The performance impacts of writing looser JavaScript are minimal.