背景
某站有人问到此问题,记录一下,以防以后要用
目的
希望收到跟多的解决方案,欢迎留言
/**
* 删除所有标签属性,支持忽略标签
* @param {*} str 字符串文本
* @param {*} ignoreArr 要忽略的标签
*/
function deleteAllTagAttr(str, ignoreArr) {
if (typeof str !== 'string') return
let reg = new RegExp(`<(?!(${ignoreArr.join('|')}))(.*?)(?:>|\/>)`, 'gi')
return str.replace(reg, mstr => {
return mstr.replace(/(<[A-z]+)(.*)?(\/?>)/gi, '$1$3')
})
}
/**
* 删除指定标签属性,
* @param {*} str 字符串文本
* @param {*} tagArr 要删除属性的标签
*/
function deleteTagAttr(str, tagArr) {
if (typeof str !== 'string') return
let reg = new RegExp(`<(?:(${tagArr.join('|')}))(.*?)(?:>|\/>)`, 'gi')
return str.replace(reg, mstr => {
return mstr.replace(/(<[A-z]+)(.*)?(\/?>)/gi, '$1$3')
})
}
// 测试文本
let test = `
<div class="seach-nav-c goods-top-seach"></div>
<img src="http://1907/10172941e5ft.jpg" alt="" class="seach-ad-img" />
<video src="ssss" class="sss"></video>
<audio src="ssss" class="sss"></audio>
<a href="ssss" >fdsf </a>
`
console.log(deleteAllTagAttr(test, ['img','video','audio']))
/*打印结果
<div></div>
<img src="http://1907/10172941e5ft.jpg" alt="" class="seach-ad-img" />
<video src="ssss" class="sss"></video>
<audio src="ssss" class="sss"></audio>
<a>fdsf </a>
*/
console.log(deleteTagAttr(test, ['img']));
/**打印结果
<div class="seach-nav-c goods-top-seach"></div>
<img>
<video src="ssss" class="sss"></video>
<audio src="ssss" class="sss"></audio>
<a href="ssss" >fdsf </a>
*/
删除指定标签属性 收集 +1
// replace 一次无需二次调用replace
function delAttr(str, tagArr) {
if (typeof str !== 'string') return
let reg = new RegExp(`<(?=(${tagArr.join('|')})\\b)(.*?)(?=\>|\/>)`, 'gi')
return str.replace(reg, '<$1 ')
}
// 第一参数 操作字符串
// 第二参数 要过滤的标签列表
let res = delAttr(test, ['div', 'a', 'input'])
// 测试通过
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。