Operator Scope of Action:
Operator First Added:
This operator tests whether pattern matches the referenced string attribute or matches a whole discrete value string within a the referenced list/set attribute value. Matches are always case-insensitive, unlike String/List.contains(). The match gives a Boolean result.
pattern is one of:
- an action code expression (which includes just referencing a single attribute name')
- a quoted literal string (i.e. actual text). Important: do not omit the enclosing quotes. If omitted, Tinderbox will try to evaluate the string as an expression. Doing this may result in the expected result but this is actually a false positive. So, remember to enclose your literals in quotes.
N.B. Unlike with String-type attributes, regex cannot be used.
The contains operator may also be used with both sets and lists, in which case it tests for set membership, i.e. matching to complete individual values rather than part of values. Thus:
are both true if $MyList contains "Monday;Tuesday;Friday". A match can use a attribute value as the pattern. Consider a single-value String-type attribute 'MyDay':
is true if the value of $MyDay for a given note is any of "Monday", "Tuesday or "Friday". Thus in an agent or find query, the pattern varies by the source value in the currently-tested note.
The chained list may also be a literal list:
If the pattern is found the function returns the matched list position (1-based). Formerly, .contains() returned true if the pattern was found.
Testing "does not contain"
Use a ! prefix to the query argument:
Use of parentheses after the !, around the query, can assist Tinderbox's parsing: