Skip to content

Commit

Permalink
feat: add support for new OS regular expressions that use backreferen…
Browse files Browse the repository at this point in the history
…ces for major, minor, patch properties

restores passing unit tests
fixes #27
  • Loading branch information
bpossolo committed May 9, 2018
1 parent 5193d40 commit b22e50a
Showing 1 changed file with 26 additions and 3 deletions.
29 changes: 26 additions & 3 deletions src/main/java/ua_parser/OSParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,17 +105,17 @@ public OS match(String agentString) {
}

if (v1Replacement != null) {
v1 = v1Replacement;
v1 = getReplacement(matcher, v1Replacement);
} else if (groupCount >= 2) {
v1 = matcher.group(2);
}
if (v2Replacement != null) {
v2 = v2Replacement;
v2 = getReplacement(matcher, v2Replacement);
} else if (groupCount >= 3) {
v2 = matcher.group(3);
}
if (v3Replacement != null) {
v3 = v3Replacement;
v3 = getReplacement(matcher, v3Replacement);
} else if (groupCount >= 4) {
v3 = matcher.group(4);
}
Expand All @@ -125,5 +125,28 @@ public OS match(String agentString) {

return family == null ? null : new OS(family, v1, v2, v3, v4);
}

private String getReplacement(Matcher matcher, String replacement) {
if (isBackReference(replacement)) {
int group = getGroup(replacement);
return matcher.group(group);
} else {
return replacement;
}
}

/**
* Checks if the replacement is a backreference (i.e. $1, $2, $3, etc) to a capturing group in the regular expression.
*/
private boolean isBackReference(String replacement) {
return replacement.startsWith("$");
}

/**
* Extracts the group number from a backreference like $1, $2, $3, etc.
*/
private int getGroup(String backReference) {
return Integer.valueOf(backReference.substring(1));
}
}
}

0 comments on commit b22e50a

Please sign in to comment.