0

我需要 reg-exp 来匹配一些文本,然后生成一个 CTA 按钮。我想要的是,以下文本将导致输出:

例 1

{BUTTON text="(some text)" link="(some link)" target="(target, OPTIONAL)" class="(classes, OPTIONAL)"}

<a href="(some link)" target="(target)" class="$4">(some text)</a>

例 2

{BUTTON text="(some text)" link="(some link)" target="(target, OPTIONAL)"}

<a href="(some link)" target="(target)">(some text)</a>

例 3

{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\_]+)?(")?}
4

1 回答 1

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="..."元素,然后只捕获...部分。

于 2013-09-27T01:15:31.907 回答