领导和尾随除去

时间:2014-09-23 15:44:00

标签: javascript regex

我有像

这样的字符串表达式
<br /><br /><br/ >this is <br /><br /><br/ > a test<br /><br /><br/ ><br> 

我需要使用普通的javascript删除第一组和最后一组<br />标记。

4 个答案:

答案 0 :(得分:3)

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

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

像这样使用它:

&#13;
&#13;
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);
&#13;
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:3)

考虑使用CSS中和br标记,而不是尝试使用regexp处理HTML,即使看起来无关紧要也不是一个好主意。

br { display: none; }

请参阅Ignore <br> with CSS?

如果您想压缩多个br代码,那么

br + br { display: none; }

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

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');
}

答案 2 :(得分:2)

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

/^\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"

答案 3 :(得分:-4)

我终于设法达成了解决方案。以下是为我工作的RegEx。

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

感谢您的帮助!