Four errors here.
Firstly, the regex attribute is an attribute value template, so any curly braces need to be doubled. Instead you seem to have doubled the backslash, which isn't necessary. I think it should be
Secondly (and this is the actual error message): within <xsl:matching-substring> the context item is the string that was matched (the matching substring). This means that you can't use a path expression that selects relative to the context node, because there is no context node. This includes an expression starting with "/", because "/" means "the root of the document that contains the context node". You need to bind a variable outside the analyze-string, and use a path expression starting with this variable
<xsl:variable name="root" select="/">
    <xsl:value-of select="$root/root/params..."
Thirdly, your regex expression matches the entire content of <text>, so the <matching-substring> instruction will only be invoked once. Fourthly, it's a greedy match, so it will swallow everything from the first open-curly to the last close-curly. I think you want to invoke it once for each thing between curly braces, which would be
<xsl:analize-string select="/root/text" regex="\{{[\w]+?\}}">
   <xsl:matching-substring><xsl:value-of select="$root/root/params/*[name()=current()]"</xsl:matching-substring>

Also please note, this list is for problems specific to the Saxon product. General XSLT coding questions are better sent to the xsl-list at
Michael Kay 
   <text>Parametrized text {name}={abc}</text>

<xsl:analize-string select="/root/text" regex=".*(\\{[\w]+\\}).*">
   <xsl:matching-substring><xsl:value-of select="/root/params/*[name()]"</xsl:matching-substring>

I want this output
Parametrized text amount=123
But Saxon throws this error   (why?)
XPTY0020: Cannot select a node here: the context is an atomic value