const regex = /<xf:tokeninputrow.*\/>/s;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('<xf:tokeninputrow.*\\\/>', 's')
const str = `<xf:title>{{ phrase('start_conversation') }}</xf:title>
<xf:breadcrumb href="{{ link('conversations') }}">{{ phrase('conversations') }}</xf:breadcrumb>
<xf:if contentcheck="true">
<div class="blockMessage blockMessage--error blockMessage--iconic">
<xf:contentcheck>
<xf:if is="\$errorUsernames is not empty">
<div>{{ phrase('you_can_not_start_conversation_with_following_users_because_of_privacy', {'usernames': \$errorUsernames|join(', ')}) }}</div>
</xf:if>
<xf:if is="\$notFoundUsernames is not empty">
<div>{{ phrase('following_users_not_found_x', {'usernames': \$notFoundUsernames|join(', ')}) }}</div>
</xf:if>
<xf:if is="\$recipientLimit">
<div>{{ phrase('you_have_exceeded_allowed_number_of_recipients_x_for', {'limit': \$recipientLimit}) }}</div>
</xf:if>
</xf:contentcheck>
</div>
</xf:if>
<xf:form action="{{ link('conversations/add') }}" ajax="true" draft="{{ link('conversations/draft') }}" data-preview-url="{{ link('conversations/add-preview') }}" class="block" data-xf-init="attachment-manager">
<div class="block-container">
<div class="block-body">
<xf:tokeninputrow name="recipients" value="{\$to}" href="{{ link('members/find') }}"
rowtype="fullWidth"
label="{{ phrase('recipients') }}"
explain="{{ phrase('separate_names_with_comma') }}" />
<xf:textboxrow name="title" value="{\$title}" rowtype="fullWidth noLabel" class="input--title"
maxlength="{{ max_length('XF:ConversationMaster', 'title') }}"
placeholder="{{ phrase('title...') }}"
label="{{ phrase('title') }}" />
<xf:editorrow name="message"
value="{\$message}"
attachments="{{ \$attachmentData ? \$attachmentData.attachments : [] }}"
rowtype="fullWidth noLabel mergePrev" />
<xf:formrow>
<xf:if is="\$attachmentData">
<xf:macro template="helper_attach_upload" name="upload_block"
arg-attachmentData="{\$attachmentData}"
arg-forceHash="{\$draft.attachment_hash}" />
</xf:if>
<xf:if is="\$xf.options.multiQuote">
<xf:macro template="multi_quote_macros" name="button"
arg-href="{{ link('conversations/multi-quote', \$conversation) }}"
arg-messageSelector=".js-message"
arg-storageKey="multiQuoteConversation" />
</xf:if>
<xf:button class="button--link u-jsOnly" data-xf-click="preview-click" icon="preview" />
</xf:formrow>
<xf:checkboxrow>
<xf:option name="open_invite" checked="{{ (\$draft.open_invite OR \$conversation.open_invite) ? 'checked' : '' }}">
{{ phrase('allow_anyone_in_conversation_to_invite_others') }}
</xf:option>
<xf:option name="conversation_locked" checked="{{ (\$draft.conversation_open OR \$conversation.conversation_open) ? '' : 'checked' }}">
{{ phrase('lock_conversation_no_responses_will_be_allowed') }}
</xf:option>
</xf:checkboxrow>
</div>
<xf:submitrow submit="{{ phrase('start_conversation') }}" sticky="true" icon="conversation">
<xf:html>
<xf:button class="u-jsOnly" data-xf-click="preview-click" icon="preview" />
</xf:html>
</xf:submitrow>
</div>
</xf:form>`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions