前导和尾随<br>移动

Leading and Trailing <br> removal

本文关键字:br gt 移动 lt      更新时间:2023-09-26

我有类似的字符串表达式

<br /><br /><br/ >this is <br /><br /><br/ > a test<br /><br /><br/ ><br> 

其中我只需要使用纯javascript删除第一组和最后一组<br />标记。

如果全局执行,这将匹配所有前导换行符和所有尾随换行符(以及前后的空白,如果您想保留前导/尾随空白,请告诉我):

^'s*(?:<br's*'/?'s*>)+|(?:<br's*'/?'s*>)+'s*$

像这样使用:

var regex = /^'s*(?:<br's*'/?'s*>)+|(?:<br's*'/?'s*>)+'s*$/gi,
    string = '   <br /><br /><br/ >this is <br /><br /><br/ > a test<br /><br /><br/ ><br> ';
string = string.replace(regex, ''); //changed replacement
console.log(string);
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

与其尝试使用regexp处理HTML(即使这看起来无害),不如考虑使用CSS中和br标记。

br { display: none; }

请参阅忽略<br>使用CSS?。

如果你想压缩多个br标签,那么

br + br { display: none; }

在您的特定情况下,CSS无法检测br是否出现在元素的开头或结尾。这里有一些JavaScript。一般来说,最好使用DOMAPI像这样操作DOM,而不是在DOM的字符串表示上使用regexp:

function removeLeadingTrailingBRs(elt) {
    var node;
    while (node=elt.querySelector('br:first-child')) { elt.deleteChild(node); }
    while (node=elt.querySelector('br:last-child'))  { elt.deleteChild(node); }
}

或者,如果你是一个坚持保理的人:

function deleteBySelector(elt, selector) {
    var node;
    while (node=elt.querySelector(selector)) { elt.deleteChild(node); }
}
function remoteLeadingTrailingBRs(elt) {
    deleteBySelector('br:first-child');
    deleteBySelector('br:last-child');
}

您可以使用以下正则表达式:

/^'s*<br's*'/?'s*>|<br's*'/?'s*>'s*$/ig

用空字符串替换:

'   <br /><br /><br/ >this is <br /><br /><br/ > a test<br /><br /><br/ ><br> '.replace(/^'s*<br's*'/?'s*>|<br's*'/?'s*>'s*$/ig, '')
// => "<br /><br/ >this is <br /><br /><br/ > a test<br /><br /><br/ >"

更新

删除多次出现:

/^'s*(<br's*'/?'s*>)+|(<br's*'/?'s*>)+'s*$/ig

'   <br /><br /><br/ >this is <br /><br /><br/ > a test<br /><br /><br/ ><br> '.replace(/^'s*(<br's*'/?'s*>)+|(<br's*'/?'s*>)+'s*$/ig, '')
// => "this is <br /><br /><br/ > a test"

我终于找到了解决方案。以下是为我工作的RegEx。

    /^[<br>]*'s*[<br>]*|[<br>]*$/g 

谢谢你的帮助!