1

私は一見かなり些細な仕事に直面していますが、一日の間に私はそれで何とか前進することに成功しませんでした。ベロシティテンプレートで文字列を処理する必要があります。文字列には次のようなビューがあります。

    Maj - [at552] - asdfghjkksfgh <br /> Avg - [at553] - asdfghjkksfgh <br /> etc

[]記号間のテキストを次のテキストに置き換える必要があります。

    <a href="http://someaddress/at522">at522</a> (at522 is specific for 
    each [ ] block)

私は非常に多くのアプローチを試しましたが、どれもうまくいきませんでした。そのため、ここに投稿できるコードのスニペットすらわかりません。重要な詳細は、アプリケーションのJava部分にはアクセスできず、velocityテンプレートに渡されるオブジェクトだけにアクセスできることです。これはメール用のテンプレートなので、JavaScriptは使用できません。私は本当にすべてのアドバイスをいただければ幸いです。

UPDATEこれは[]の最初の出現に対して正常に機能するコードです。

#set ($scopeComment = $issue.getCustomFieldValue("customfield_10201").replaceAll("\n", "<br />"))
#set ($start = $scopeComment.indexOf("["))
#set ($end = $scopeComment.indexOf("]"))
#set ($substr = $scopeComment.substring($start, $end))
#set ($scopeComment = $scopeComment.replace($substr, "<a href=\"localhost/$substr\">$substr</a>"))

しかし、すべての[]ブロックに対してループで動作させることはできません。これが私が試しているアプローチの1つです。

#foreach ($index in [0..$scopeComment.length()])
    #set($nextIndex = $index.index+1)
    #set($curChar = $scopeComment.substring($index.index, $nextIndex))
    #if ($curChar.equals("["))
        #set ($start = $count+1)
        #set ($end = $scopeComment.indexOf("]", count))
        #set ($sub = $scopeComment.substring($start, $end))
        $sub <br/>
    #end
#end
4

2 に答える 2

2

この場合、RegExpは機能します。

#set ($var = $var.replaceAll('\[([a-z0-9]*)\]', '<a href="http://someaddress/$1">$1</a>'))

重引用符と一重円記号を使用したことに注意してください。Javaとは異なり、二重引用符または一重引用符を使用すると、Velocityの動作が異なります。

コードには多くのエラーがあります。たとえば、何が$index.index想定されていますか?$indexは整数なので$index、チェックで使用する必要があります。また、あなたは使用します$countが、それはどこにも定義されていません、あなたはおそらく同様に意味$indexします。

于 2012-12-20T01:32:42.597 に答える
0

正規表現を試してください:

#set($var= $var.replaceAll("\\[([a-z0-9]*)\\]", "<a href="http://someaddress/$1">$1</a>"))

正規表現の実例

于 2012-12-19T08:03:37.773 に答える