2014-02-19 2 views
1

Я использую следующий фрагмент кода, чтобы заменить регулярное выражение '\s*AND\s*NOT\s*scope:\("TEXT"\)' с определенной строки только, если матч не occurr (non-matching-substring):Могу ли я использовать оператор OR в <xsl: value-of select>?

<xsl:template name="strip-scopes"> 
       <xsl:param name="q" /> 
       <xsl:analyze-string select="$q" regex='\s*AND\s*NOT\s*scope:\("TEXT"\)'> 
         <xsl:matching-substring></xsl:matching-substring> 
         <xsl:non-matching-substring> 
        <xsl:value-of select="replace(replace(.,'AND \(scope:.*?\)',''), 'AND facet_.*?:\(.*?\)', '')"/> 
         </xsl:non-matching-substring> 
       </xsl:analyze-string> 
    </xsl:template> 

Он отлично работает, но мне теперь нужно включить другое условие в <xsl:non-matching-string>. Можно ли включить условие ИЛИ внутри элемента, чтобы можно было заменить как 'AND facet_.*?:\(.*?\)', так и 'AND NOT facet_.*?:\(.*?\)'?

ответ

1

Вы можете использовать replace(., 'foo|bar', 'whatever'), чтобы иметь как foo, так и/или bar подстроки, замененные на whatever. Второй аргумент replace является регулярным выражением, и поэтому | допускает альтернативы.

+0

большое спасибо! Я пробовал всевозможные вещи, и это было так просто! – paranza