好吧,除非您可以保证所有这些属性将始终存在,并且始终在带引号的字符串等中,否则这不会很容易。
var html = '<img src="path_to_img.jpg" width="450" height="199" alt="alt description" title="image title" class="image_classes" />';
var regex = /<img .*?(src|alt|title|class)="([^"]*)" .*?(src|alt|title|class)="([^"]*)" .*?(src|alt|title|class)="([^"]*)" .*?(src|alt|title|class)="([^"]*)".*?\/?>/g;
var xmlTemplate = '<image><$1>$2</$1><$3>$4</$3><$5>$6</$5><$7>$8</$7></image>';
var xml = html.replace(regex, xmlTemplate);
如果您的源 HTML 不是统一的,那么您可能必须使用.replace(regex, func)
而不是.replace(regex, string)
.
正如您所说的 alt 属性可能不存在,那么您将需要将正则表达式与函数一起使用,如下所示:
var html = '<img src="path_to_img.jpg" width="450" height="199" alt="alt description" title="image title" class="image_classes" />';
var regex = /<img .*?>/gi;
function getAttributeValue(tag, attribute)
{
var regex = new RegExp('\\b' + attribute + '="([^"]*)"', 'i');
var match = tag.match(regex);
return '\t<' + attribute + '>' + (match ? match[1] : '') + '</' + attribute + '>\n';
}
var xml = html.replace(regex, function($0)
{
var xml = '<image>\n';
xml += getAttributeValue($0, 'src');
xml += getAttributeValue($0, 'alt');
xml += getAttributeValue($0, 'title');
xml += getAttributeValue($0, 'class');
xml += '</image>';
return xml;
});