テンプレートのリテラル内ですべての出現を<% anything %>
と一致させようとしています。 正規表現の設定は次のようになります。私のテンプレートは、このRegexがすべての発生と一致していません
`<div class="tile">
<span><%ENTRY_NUMBER%></span>
<span><%NAME%> , <%CLASS%> , <%GENDER%> , <%AGE%></span>
</div>`
のように見える場合
process(template : string , data: Object) {
let re = /<%([^%>]+)?%>/g, match;
while (match = re.exec(template)) {
template = template.replace(match[0], data[match[1]]);
}
return template;
}
それはその後、別の出現を選んでおくだけで罰金最初の出現と一致します。 htmlタグ内に1つのマッチがある場合はうまく動作しますが、2番目のspan要素のような倍数を使用すると、別のオカレンスが欠けてしまいます。私はそれが<と>と関係があると思います。
以下のようにコンマの代わりに<>
でこれらのオカレンスを区切っても問題ありません。
<span><%NAME%> <> <%CLASS%> <> <%GENDER%> <> <%AGE%></span>
結果、この
<span> john <> biology <> male <> 17 </span>
ように私は正規表現を複数回調べたが、無駄にしています。
はあなた 'しばらく交換してみてください'return template.replace(re、function($ 0、$ 1){return data [$ 1]?data [$ 1]:$ 0;})'でブロックします。また、ここで正規表現として 'let re =/<%(.+?)%>/g'を使用します(データキーに'> 'や'% 'がある場合のみ)。 –
ご協力ありがとうございますが、私は説明を探しています**なぜ**私のコードは動作しません。また、私はjsで$とvar名を見たことがない。 –
JavaScriptは、名前に '$'と '_'を使用するときに文字として扱います。彼らにとって特別なことは何もありません。どちらもJavaScriptコードではかなり一般的です:jQueryコードでは '$'、アンダースコア/ Lodashコードでは '_'です。 –