我有像
这样的字符串表达式<br /><br /><br/ >this is <br /><br /><br/ > a test<br /><br /><br/ ><br>
我需要使用普通的javascript删除第一组和最后一组<br />
标记。
答案 0 :(得分:3)
如果全局执行,这将匹配所有前导换行符和所有尾随换行符(以及之前/之后的空格,如果您想保留前导/尾随空格,请告诉我):
^\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);
&#13;
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
&#13;
答案 1 :(得分:3)
考虑使用CSS中和br
标记,而不是尝试使用regexp处理HTML,即使看起来无关紧要也不是一个好主意。
br { display: none; }
如果您想压缩多个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
感谢您的帮助!