2011-03-16 82 views
0

我想解决一些正常的表达式,我在一个方向工作,但失败时,我改变了属性。正则表达式属性替换

我想实现的就是找到对齐的价值并更换该数值到类

var s = '<img src="" align="left" class="smart" title="title for reference" />'; 
var reg = new RegExp(/(?:align="(.*?)").*?(?:class="(.*)")/); 
console.log(s.replace(reg ,'class="image-$1 $2"')); 

能正常工作和输出

<img src="" class="image-left smart" title="title for reference" /> 

,但如果我改变HTML放置类之前对齐我刚刚得到原始html字符串

+0

强制性链接:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2011-03-16 19:27:54

回答

0

你可以使用jQuery来做到这一点。

var s = '<img src="" align="left" class="smart" title="title for reference" />'; 

$('<div/>').append(
    $(s).addClass('image-' + $(s).attr('align')) 
     .removeAttr('align') 
).html(); 

这具有不依赖于属性等的特定顺序的优势。而你当然可以,只是添加修改的HTML DOM树,而不是使用与$('<div/>')的手段来得到的HTML文本。

0

正则表达式是臭名昭着与标记工作不好,因为标记不规则。当你在浏览器中工作时,你已经拥有了一个功能强大的HTML解析器,所以使用正则表达式并不是你的最佳选择。

由于a'r suggests,这可以用jQuery很容易地完成。这里有一个纯DOM相当于:

var div = document.createElement("div"); 

div.innerHTML = s; 

var img = div.firstChild; 

img.className += " image-" + img.getAttribute("align"); 
img.removeAttribute("align"); 

console.log(div.innerHTML); 

(Gecko DOM reference)