-2

我在执行我想要实现的目标时遇到困难,这可能只是睡眠不足,但正则表达式更有可能不是我的强项,我只是无法完全理解它,但希望有人能给我一个手在这里。

我有以下字符串:

<span class="comment"><!--Some string\nsome other string\nsome more string--></span>

我需要对其进行格式化,使其看起来像这样:

<span class="comment"><!--Some string</span>\n<span class="comment">some other string</span>\n<span class="comment">some more string--></span>

现在,如果这是唯一的字符串,这将非常容易,因为我可以执行以下操作:

/</span>\n<span class="comment">/gi

但是,只有在相应的 open 具有类“comment”时才会发生格式</span>设置,另一个问题是带有类注释的 open span 标签不一定是字符串的第一个单词,它前面可能有一个字符串,并且跨度内可能有无限多个 \n ...例如,另一种变体可能如下所示:

&lt;<span class="tag">string1\nstring2</span>&gt;<span class="comment"><!--string\nanother random string--></span>

不应在带有类标签的范围内进行格式化,但是应在带有类注释的范围内进行格式化。

这对我来说是相当具有挑战性的,我得到的最接近的是以下内容:

正则表达式:

/<span class="comment">([^\<\/]*)\n/gi

替代品:

<span class="comment">$1</span>\n<span class="comment">

这很接近,因为它使用类注释格式化跨度内的最后一行和第一行,而不是中间的行。

可能有 javascript 解决方案可以做到这一点,但如果可能的话,我更喜欢使用正则表达式。

4

1 回答 1

0

干得好,

 str.replace (/<span\s+class="comment">.*<\/span>/ig, function (m) {
     return m.replace (/\n/g, '</span>\n<span class="comment">');
   });

提取跨度及其内容,然后替换\n该部分中的所有内容。

于 2013-05-30T18:41:44.753 回答