求JavaScript正则:将连续<br>标签数量减一
解决连续转义<br>标签冗余问题
问题场景
现有代码会把textarea中的换行符全局替换为转义后的<br>标签,但用户输入时习惯按两次回车换行,导致生成的字符串出现连续多个<br>。需要实现:任意数量的连续<br>移除其中一个,例如:
- 输入
first line<br><br>Second line→ 输出first line<br>Second line - 输入
first line<br><br><br>Second line→ 输出first line<br><br>Second line
修改后的代码
<textarea style="width:200px;height:200px" id="first"></textarea> <textarea style="width:200px;height:200px;" id="second"></textarea> <button id="submit">submit</button> <script type="text/javascript"> const firstTextArea = document.querySelector('#first'); const secondTextArea = document.querySelector('#second'); const submitBtn = document.querySelector('#submit') submitBtn.addEventListener('click' , function(){ let str = firstTextArea.value.replace(/(?:\r\n|\r|\n)/g, '<br>'); // 处理连续<br>,每组减少一个 str = str.replace(/(<br>){2,}/g, (match) => match.slice(6)); secondTextArea.value = str; }) </script>
逻辑说明
- 保留原逻辑:将所有换行符(含
\r\n、\r、\n)统一替换为<br> - 新增连续标签处理:
- 正则
/(<br>){2,}/g:全局匹配连续出现2次及以上的<br>标签组 - 回调函数
match.slice(6):每个<br>占6个字符,slice(6)会去掉匹配组中的第一个<br>,保留剩余的n-1个,正好满足需求
- 正则
内容的提问来源于stack exchange,提问作者AfaqQazi
相关产品推荐
相关产品推荐

