我在执行我想要实现的目标方面遇到困难,可能只是睡眠剥夺,但正则表达式更可能不是我的强项,我只是不能完全理解它,但希望有人可以请帮我一把。
我有以下字符串:
<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
但是格式化应该只在相应的打开</span>
具有类“注释”时发生,另一个问题是带有类注释的开放范围标记不一定是字符串的第一个单词,可能存在它前面的一个字符串,在跨度内可能有无数个\ n \ n \ n例如另一种变化可能如下所示:
<<span class="tag">string1\nstring2</span>><span class="comment"><!--string\nanother random string--></span>
在带有类标记的范围内不应该进行格式化,但是格式化应该在带有类注释的范围内进行。
这对我来说相当具挑战性,我得到的最接近的是:
正则表达式:
/<span class="comment">([^\<\/]*)\n/gi
替换:
<span class="comment">$1</span>\n<span class="comment">
这很接近,因为它使用类注释格式化范围内的最后一行和第一行,但不是两者之间的行。
可能有javascript解决方案可以做到这一点,但如果可能的话我宁愿使用正则表达式。
答案 0 :(得分:0)
你走了,
str.replace (/<span\s+class="comment">.*<\/span>/ig, function (m) {
return m.replace (/\n/g, '</span>\n<span class="comment">');
});
提取范围及其内容,然后替换该部分中的所有\n
。