我需要使用reg-exp来匹配某些文本,然后生成一个CTA按钮。我想要的是,以下文本将导致输出:
{BUTTON text="(some text)" link="(some link)" target="(target, OPTIONAL)" class="(classes, OPTIONAL)"}
<a href="(some link)" target="(target)" class="$4">(some text)</a>
{BUTTON text="(some text)" link="(some link)" target="(target, OPTIONAL)"}
<a href="(some link)" target="(target)">(some text)</a>
{BUTTON text="(some text)" link="(some link)"}
<a href="(some link)">(some text)</a>
我自己的“解决方案”是这样的,但我不认为这是“正确”的方式 - 换句话说,我很确定,它有缺陷!
{BUTTON text="([a-zA-Z0-9 ]+)" link="([A-Za-z0-9\/\:\.\?\=]+)"( target=")?([a-zA-Z\_]+)?(")? ( class=")?([a-zA-Z\_]+)?(")?}
答案 0 :(得分:0)
您需要对非替换中的部分使用非捕获组(或更改替换中的数字以考虑所有部分):
{BUTTON text="([a-zA-Z0-9 ]+)" link="([A-Za-z0-9\/\:\.\?\=]+)"\s*(target="[a-zA-Z\_]+")?\s*(class="[a-zA-Z\_]+")?}
替换字符串应为:
<a href="$2" $3 $4>$1</a>
请注意,我将整个target="..."
和class="..."
元素组成了一个可选组,以便将它们全部替换为替换组。
以下是如何捕获类名称并将其与模板中的其他类合并的方法:
{BUTTON text="([a-zA-Z0-9 ]+)" link="([A-Za-z0-9\/\:\.\?\=]+)"\s*(target="[a-zA-Z\_]+")?\s*(?:class="([a-zA-Z\_]+)")?}
<a href="$2" $3 class="c1 c2 $4">$1</a>
这使用非捕获组来匹配整个class="..."
元素,然后仅捕获...
部分。