2 回答
![?](http://img1.sycdn.imooc.com/5f33c0c90001f9ad05720572-100-100.jpg)
TA贡献1155条经验 获得超0个赞
序言:不要只是复制这个,读到最后。
从另一个角度思考 - 通过替换直到找不到匹配项而不是直到没有进行任何更改,这似乎很简单。
var text = "<span><span>ex ample </span> </span>";
var trim_start = /^((<[^>]*>)*)\s+/;
while(text.match(trim_start)) {
text = text.replace(trim_start, "$1");
}
var trim_end = /\s+((<[^>]*>)*)$/;
while (text.match(trim_end)) {
text = text.replace(trim_end, "$1");
}
console.log(text);
输出如预期 - 唯一的空间是 ex ample
但是如果替换可能不会改变任何东西,这就会有一个大问题。简单地更改\s+为\s*使其变成无限循环。所以,总而言之,它适用于我的情况,但并不健壮,要使用它,您必须完全确定每次替换都会在正则表达式匹配时改变某些内容。
![?](http://img1.sycdn.imooc.com/545861e40001199702200220-100-100.jpg)
TA贡献1845条经验 获得超8个赞
您需要为标签添加一些含义,有些需要空格,有些不需要。
尝试这个:
text.replace(/\s*(<\/?(span|div)>)\s*/g, "$1") .trim() .replace(/\s+/g, ' ');
它:
替换标签“环绕”内容周围的空格
修剪全局字符串周围的空格
去除多余的空格
可以更改“周围”标签列表以包含诸如tr
...
第 2 步和第 3 步可能会首先出现以加快速度。
试过:
var text = "<div> <i>ano</i> <b>ther</b> <span> <b>my</b> <i>ex</i> <u> ample </u> </span> </div>";
先回答,再评论。
这个想法是删除之间的所有空格:
一个非空格字符和一个开始标签
一个结束标记和一个非空格字符
text.replace(/([^\s])\s*(<)/g, "$1$2") .replace(/([>])\s*([^\s])/g, "$1$2") .trim();
添加回答
举报