我正在使用Node.js.
我有问题要处理以下字符串
<em><em> - first Occurrence
<em><em><em> - second Occurrence
<em><em><em><em> - third Occurrence
<em><em><em><em><em> - fourth Occurrence
如何删除倍数并仅将其设为单个标记?
任何人都协助我处理。
提前致谢。
注意:我正在尝试正则表达式&#34; (<em>(<em>)?)
&#34;
答案 0 :(得分:1)
查找
(<em>)+
并替换为<em>
。
这会发现一个又一个(+
)<em>
次出现<em>
个。然后,所有这些将被替换为单个(
<em> # Captures first <em>
(<em>)? # Optional <em>
)
,从而删除重复的标记
以下是您的RegEx不起作用的原因:
<em><em>
所以这最多只能捕获<em><em><em>
。这在第一次出现时起作用,但在另一次出现时起作用。如果有class Bm : public QObject
{
Q_OBJECT
private slots:
void Benchmark_1()
{
bm_1 bm;
QBENCHMARK
{
pool.start(&bm); //pool is a QThreadpool
pool.start(&bm);
pool.waitForDone();
}
}
void Benchmark_2()
{
bm_1 b_1; bm_2 b_2;
QBENCHMARK
{
pool.start(&b_1);
pool.start(&b_2);
pool.waitForDone();
}
}
};
,则前2个合并为一个,但最后一个仍然是左边。
因此,为了使您的RegEx工作,您必须多次运行它(即替换原始字符串,然后替换新替换的字符串,然后替换它等等。)
答案 1 :(得分:1)
我假设可以有任何标记,而不仅仅是em
您关心的问题。所以我在我的正则表达式中使用.+
console.log("<em><em><em><em>".replace(/(<.+?>)+/, "$1"))
<强> Ideone Demo 强>