The Prefix enum
The Type enum
Parse an expression to create a selector.
The following types of expression are supported. The type is determined by the first character of the expression.
>
. The remainder of
the expression must be a valid topic path. A topic path is a '/'
separated string of parts. Each part is formed of one or more UTF
characters, except '/'.
A PATH selector is returned that only selects the topic with the given path.
The initial >
can be omitted if the path begins with a character
other than one of #
, ?
, >
,
*
, $
, %
, &
, or
<
. This abbreviated syntax allows most
topic paths to be used directly as selector expressions which appears
more natural. Abbreviated path expressions are converted to standard path
expressions by prepending the >
character. Thus
a/b
is interpreted as >a/b
.
Diffusion.topicSelectors().parse("a/b").getExpression()
will
return ">a/b"
.
?
.
The remainder of the expression is split into a list of regular
expressions using the /
character as a separator.
A SPLIT_PATH_PATTERN selector is returned that selects topics for which each regular expression matches each part of the topic path at the corresponding level.
*
.
The remainder of the pattern is a regular expression.
A FULL_PATH_PATTERN selector is returned that selects topics for which the regular expression matches the complete topic path.
Full-path patterns provide a lot of expressive power but should be used sparingly since the server can evaluate split-path patterns more efficiently.
Selector sets are the preferred way to combine expressions.
anyOf("a", "b")
is equivalent to the full-path expression "
*
/a|/b
", but can be evaluated more efficiently by the
server.
#
. The
remainder of the expression is a list of contained selectors, formatted
as described below.
A SELECTOR_SET selector is returned that selects topics that match any of the contained selectors.
The contained selectors are formatted as follows. First, any selector sets
are expanded to produce a full list of non-selector set expressions. Then
the selector expressions are concatenated, separated by the separator
////
. This separator has been chosen as it is not valid in a
path, and is not a useful sequence in a pattern.
Split-path and full-path pattern expressions can be further modified by
appending /
or //
. These control the behavior of the
selector with respect to the descendants of the topics that match the
pattern.
/
or //
, it
selects only the topics that match the pattern./
, it selects only the
descendants of the matching topics, excluding the matching topics.//
, it selects the matching
topics and all of their descendants.Any Java-style regular expression can be used in split-path and full-path patterns, with the following restrictions:
/
.
////
.
Regular expressions that break any of these restrictions would never match a topic path, so they make no practical difference.
Path | Matches alpha/beta ? |
Matches alpha/beta/gamma ? |
---|---|---|
>alpha/beta |
yes | no |
alpha/beta |
yes | no |
>alpha/beta/gamma |
no | yes |
alpha/beta/gamma |
no | yes |
>beta |
no | no |
beta |
no | no |
>.*` /.*` |
no | no |
>/alpha/beta/ |
yes | no |
/alpha/beta/ |
yes | no |
Path | Matches alpha/beta ? |
Matches alpha/beta/gamma ? |
---|---|---|
?alpha/beta |
yes | no |
?alpha/beta/gamma |
no | yes |
?beta |
no | no |
?.* |
no | no |
?.*` /.*` |
yes | no |
?alpha/beta/ |
no | yes |
?alpha/beta// |
yes | yes |
?alpha/.*` //` |
yes | yes |
Path | Matches alpha/beta ? |
Matches alpha/beta/gamma ? |
---|---|---|
*alpha/beta |
yes | no |
*alpha/beta/gamma |
no | yes |
*beta |
no | no |
*.*beta |
yes | no |
*.* |
yes | yes |
*alpha/beta/ |
no | yes |
*alpha/beta// |
yes | yes |
Example:
// Simple selector
var selector = diffusion.selectors.parse(">a/b");
Example:
// Creating a selector set
var selectorSet = diffusion.selectors.parse(">a", ">b");
the pattern expression(s). At least one valid selector has to be specified.
additional pattern expressions
the topic selector. If multiple expressions are provided,
this will return a SELECTOR_SET
that will match if
any of the * provided selectors
match.
Create TopicSelector instances for use with other API methods.
Selectors are evaluated against topic paths. A topic path is a '/' separated string of parts, which map to the topic tree. Each part is formed of one or more UTF characters, except '/'. Topic paths are absolute, and evaluated from the root of the topic tree.
Example:
// Create a topic selector var selector = diffusion.selectors.parse('?foo/bar/.*');