日期:2014-05-16  浏览次数:20375 次

Js正则匹配标签内容
有好多个 span标签 如:
<span style=""> 1</span>
<span style="">   1  2</span>

要求用正则 把 每个 span标签里面的内容前面的 多个空格 替换掉 一个空格,如下,2前面的空格不变。
<span style="color: #0;"> 1</span>
<span style="color: #0;"> 1  2</span>
谢谢!

------解决方案--------------------
s= s.replace(/^\s*/," ");

获取span的内容,执行上面的replace,再重新给span赋值?
------解决方案--------------------
var ele = document.getElementById("aa"),
    htm = ele.innerHTML;
htm = htm.replace(/\<span\s?[^\>]*\>(?:(\s*)[^\s]+)\<\/span\>/g,function($1,$2){
console.log($1);
console.log($2)
return $1.replace($2," ");
});
console.log(htm);
ele.innerHTML = htm;


试试,这样可以把id=aa下的所有子元素的span进行处理,不过也是得要重新赋值的
------解决方案--------------------
html.replace(/^[\s\uFEFF\xA0]+
------解决方案--------------------
[\s\uFEFF\xA0]+$/g,"&nbsp;");
------解决方案--------------------
你给一下你匹配不到的html的代码结构呗,我们也可以测试测试。

是不是你有的span标签还有子标签?
------解决方案--------------------
如果是在浏览器上就不需要,整个网页用正则匹配。
浏览器都用缓存把每个dom element都存起来的,何苦?
var $l = document.getElementsByTagName('span');
var i=0;
for(;$l[i];i++){
var $1 = $l[i].innerHTML;
var $2 = $1.replace(/^\s(\s)+/,' ');
$l[i].innerHTML = $2;

}

------解决方案--------------------
html.replace(/(<span[^>]*>)[\s\uFEFF\xA0]+(.*)(\<\/span>)/g,"$1&nbsp;$2$3")