Rich Text Editorを使用して、Twigテンプレートのオンライン修正を許可します。小枝は、変数を表示するには、次の構文を使用して、テンプレートエンジンされています。今、私が欲しいものを次の私のエディタに、表示することですTwigのJavascript正規表現テンプレートの内容
{{ url('mr_message_read', {id: message.id}) }}
:
{{ object.property }}
それはまたのようなURLを生成する機能を使用していますTWIG変数との関数のリストがテンプレートで使用されています。このために、私は上記のように "キーワード"の小枝を持つHTMLとして現在のコンテンツを取得します。キーワードを抽出するために、私は下の正規表現を使用する:小枝機能が}文字列を必要とする
var reg = /{{[^}]+}}/g;
var match = text.match(reg);
console.log(match);
これは、1なく例えば2作業例を動作します。だから、私は "以外のもの}}"を許可するいくつかの他の構文を試しました。いずれもフィットしていないようです:
var reg = /{{[^}]+}}/g; // GOOD but ignores second example
var reg = /{{[^}}]+}}/g; // Idem
var reg = /{{[^}}]*}}/g; // Idem
var reg = /{{(^}}+)}}/; // null
var reg = /{{(^}})+}}/; // null
var reg = /\{\{[^\}\}]+\}\}/g; // Ignores second example
var reg = /\{\{[^}}]+\}\}/g; // Ignores second example
var reg = /\{\{[^\}\}]+\}\}/g; // Ignores second example
var reg = /\{\{[^[}}]]+\}\}/g; // Ignores second example
私は今苦労しています。私はそれがエスケープの問題だと思うが、私は:)
サンプルコンテンツこだわっている:
<p>{{ author.fullname }} wrote you a message. Read it here: <a href="{{ url('mr_message_read', {id: message.id}) }}">Messagerie</a>.</p>
<hr />
<blockquote>
<p>{{ message.content|nl2br }}</p>
</blockquote>
EDIT:トーマス・コードに基づいて、私のソリューション
function getTwigTags(){
var str = CKEDITOR.instances['form_content'].getData();
var regex = /{{\s*([^{]*{([^{]*):\s*(.*?)}.*?|[^{]*)\s*}}/g;
var keywords = new Array();
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
if(match !== 'undefined' && groupIndex == 1)
// console.log(`Found match: group ${groupIndex}: ${match}`);
keywords[keywords.length] = match;
});
}
return keywords;
}
理由だけではなく、[ '{{(。*?)}}'](https://regex101.com/r/Ax9uWQ/2)? –
'?{(。*)}}'のような踏み台がなければ、欲張りが減ります。私はこのケースでは怠け者である必要はないと思う。 –
「すべて」セレクタを使用すると、質問に追加したサンプルコンテンツで奇妙な結果が得られます。最初のタグと2番目のタグの両方を取得して2つの結果が得られます。 – LoicPenn