split[ ]match<Items> is a good option if you want to find only exact word matches (and if <<Items>> does not itself contain spaces, of course!) But if you want to preserve the “fuzziness” of search (e.g. case-insensitivity or word-internal matches), you can do that too. Here’s an adaptation of @Springer’s conditional code:
<$let
Items={{!!items}}
>
<% if [{!!BasisListe}!search:title<Items>] %>
@@ button here @@
<% endif %>
</$let>
This assumes that BasisListe is the literal name of the field, rather than a variable <<BasisListe>> containing a different field name. If you did in fact intend <<BasisListe>> to refer to a variable defined outside the conditional, you could replace {!!BasisListe} with <currentTiddler>get<BasisListe>.
In either case, the real trick here is the use of search:title, and the key point is that TW filters use :title (and sometimes {!!title} and <currentTiddler>) to refer to the input value, whatever that is. So we can use search:title to search inside each string supplied to the search operator — regardless of whether it corresponds to an actual tiddler title.
Here are some more simple examples illustrating this principle:
{{{ [[A tiddler that does not exist!]search:title[a]] }}} = A tiddler that does not exist!
{{{ [enlist[A B C D E]search:title[a]] }}} = A
And we can use !search:title in the same way:
{{{ [enlist[A B C D E]!search:title[a]] }}} => B C D E
This lets us incorporate the negation directly into the conditional filter, so we don’t need the <% else %> case: the button can go directly after <% if ... %>.