如何使用正则表达式删除重复元素?

时间:2016-04-08 11:24:26

标签: html regex node.js

我正在使用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;

2 个答案:

答案 0 :(得分:1)

查找

(<em>)+

并替换为<em>

这会发现一个又一个(+<em>次出现<em>个。然后,所有这些将被替换为单个( <em> # Captures first <em> (<em>)? # Optional <em> ) ,从而删除重复的标记

Live Demo on Regex101

以下是您的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