我知道这是一个晚回答,但如果您总是可以使用
sanitize-html。它是为node编写的,但是我相信您可以针对该库(或者您的代码)运行
browserify。
请注意,它使用lodash,因此如果您已经在使用它,则可能需要调整包。
这个例子比你要找的还多... 我使用这个库来清理输入代码,将其转换为Markdown格式存储在数据库中,然后通过marked重新生成。
'use strict';
var sanitize = require('sanitize-html')
,toMarkdown = require('to-markdown').toMarkdown
;
module.exports = function convertHtmlToFilteredMarkdown(input, options) {
if (!input) return '';
options = options || {};
var response = (input || '').toString().trim()
.replace(/(\r\n|\r|\n)/g, '\n')
.replace(/“/g, '"')
.replace(/”/g, '"')
.replace(/‘/g, '\'')
.replace(/’/g, '\'')
;
response = sanitize(response, {
allowedTags: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol', 'nl', 'li', 'b', 'i', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div', 'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre' ],
transformTags: {
'ol': 'ul'
}
}).replace(/\r\n|\r|\n/g,'\n')
if (!options.tables) {
response = response.replace(/[\s\n]*\<(\/?)(table|thead|tbody|tr|th|td)\>[\s\n]*/g, '\n\n')
}
response = response
.replace(/[\s\n]*\<(\/?)(div|p)\>[\s\n]*/g, '\n\n')
.replace(/\>#/g, '\n\n#')
.replace(/\\s+\</,'<')
.replace(/\>\s+\n?/,'>\n')
.replace(/\&?nbsp\;?/g,' ')
.replace(/\<\h[12]/g,'<h3').replace(/\<\/\h[12]/g,'</h3')
;
response = toMarkdown(response);
response = response
.replace(/(?:^|\n)##?[\b\s]/g,'\n### ')
.replace(/(\r\n|\r|\n)/g, '\n')
.trim()
return response + '\n';
}