我正在使用EXTJS HTML编辑器,角色是2000,但是我正在剥离从word复制时出现的所有MS Word格式,我使用的是我在这里找到的这个功能
function cleanHTML(input) {
// 1. remove line breaks / Mso classes
var stringStripper = /(\n|\r| class=(")?Mso[a-zA-Z]+(")? ^p)/g;
var output = input.replace(stringStripper, ' ');
// 2. strip Word generated HTML comments
var commentSripper = new RegExp('<!--(.*?)-->','g');
var output = output.replace(commentSripper, '');
// 3. remove tags leave content if any
var tagStripper = new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>','gi');
output = output.replace(tagStripper, '');
// 4. Remove everything in between and including tags '<style(.)style(.)>'
var badTags = ['style', 'script','applet','embed','noframes','noscript'];
for (var i=0; i< badTags.length; i++) {
tagStripper = new RegExp('<'+badTags[i]+'.*?'+badTags[i]+'(.*?)>', 'gi');
output = output.replace(tagStripper, '');
}
// 5. remove attributes ' style="..."'
var badAttributes = ['style', 'start'];
for (var i=0; i< badAttributes.length; i++) {
var attributeStripper = new RegExp(' ' + badAttributes[i] + '="(.*?)"','gi');
output = output.replace(attributeStripper, '');
}
return output;
}
但是,我想保持字体颜色不变,我试图删除字体参数,但它不起作用。
答案 0 :(得分:2)
本周我遇到了这个问题,并找到了这篇文章,认为可靠的回应可能会帮助其他人。经过一整天的工作,这是我的发现:
我一直在尝试做同样的事情,亚历山大的答案不能解决问题,因为<... style="color:"
位于<span>
标记内(在步骤2中已将其删除)。
如果字体不在跨度之内,则始终在此函数的底部(步骤5),所有样式标签都将被删除。
我花了整整一天的时间来研究可能的解决方案(对RegEx的经验很少),我想到了这一点:
function CleanWordFormatting(input) {
// 1. Remove line breaks / Mso classes
var stringStripper = /(\n|\r| class=(")?Mso[a-zA-Z]+(")?)/g;
var output = input.replace(stringStripper, ' ');
// 2. Strip Word generated HTML comments
var commentSripper = new RegExp('<!--(.*?)-->', 'g');
var output = output.replace(commentSripper, '');
var tagStripper = new RegExp('<(/)*(meta|link|\\?xml:|st1:|o:|font)(.*?)>', 'gi');
// 3. Remove tags leave content if any
output = output.replace(tagStripper, '');
// 4. Remove everything in between and including tags '<style(.)style(.)>'
var badTags = ['style', 'script', 'applet', 'embed', 'noframes', 'noscript'];
for (var i = 0; i < badTags.length; i++) {
tagStripper = new RegExp('<' + badTags[i] + '.*?' + badTags[i] + '(.*?)>', 'gi');
output = output.replace(tagStripper, '');
}
// 5. Remove any unwanted styling
// NOTE: Add your own list of 'blacklisted' css attributes here
var badStyling = ['margin-top:', 'margin-bottom:', 'line-height:', 'mso-fareast-font-family:"', 'font-weight:', 'margin:'];
for (var i = 0; i < badStyling.length; i++) {
attrStripper = new RegExp('(' + badStyling[i] + ')([^;]*)+[^]', 'gm');
output = output.replace(attrStripper, '');
}
// 6. Remove any unwanted attributes
var badAttributes = ['start'];
for (var i = 0; i < badAttributes.length; i++) {
var attributeStripper = new RegExp(' ' + badAttributes[i] + '="(.*?)"', 'gi');
output = output.replace(attributeStripper, '');
}
return output;
}
以下几行内容与原始内容不同:
var tagStripper = new RegExp('<(/)*(meta|link|\\?xml:|st1:|o:|font)(.*?)>', 'gi');
上面的行具有| span |。部分已删除。
// 5. Remove any unwanted styling
// NOTE: Add your own list of 'blacklisted' css attributes here
var badStyling = ['margin-top:', 'margin-bottom:', 'line-height:', 'mso-fareast-font-family:"', 'font-weight:', 'margin:'];
for (var i = 0; i < badStyling.length; i++) {
attrStripper = new RegExp('(' + badStyling[i] + ')([^;]*)+[^]', 'gm');
output = output.replace(attrStripper, '');
}
接下来,我添加了此循环,该循环将删除所有不需要的样式标签
var badAttributes = ['start'];
最后,从badAttributes变量中删除样式。
这是种骇客的工作,但这是我唯一能够上班的事情。祝你好运!
答案 1 :(得分:0)
假设
<font color=>
,而不是<span style="color:">
,以下命题成立:如果替换
new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>','gi');
与
new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:)(.*?)>','gi');
不会从插入的HTML中删除字体标记,您将正确看到颜色。