正则表达式技巧:如何保留<a>标签并删除其余所有HTML标签?
用单个正则就能搞定你的需求!
嘿,完全可以用单个正则表达式实现删除除<a></a>之外的所有HTML标签,不用写多个正则~
核心思路
我们需要匹配所有HTML标签,但用负向预查排除掉<a>开始标签和</a>结束标签,然后把匹配到的标签替换为空字符串就行。
具体正则与代码示例
这里给你一个适用于你场景的正则:
/<(?!\/?a\b)[^>]+>/g
拆解一下这个正则的逻辑:
<:匹配HTML标签的左尖括号(?!\/?a\b):负向预查,意思是“接下来的内容不能是可选的/(对应结束标签)加上a单词边界”,这样就排除了<a和</a开头的标签[^>]+:匹配除右尖括号>之外的所有字符,也就是标签内部的内容(比如属性、标签名)>:匹配HTML标签的右尖括号/g:全局修饰符,确保替换所有符合条件的标签
以JavaScript为例,使用方式如下:
const originalStr = 'Some words <img src="www.test.com">. Next words <a href="www.abc.com">abc</a>'; const processedStr = originalStr.replace(/<(?!\/?a\b)[^>]+>/g, ''); console.log(processedStr); // 输出结果:"Some words. Next words <a href="www.abc.com">abc</a>"
小提醒
如果你的实际场景中存在更复杂的HTML(比如<a>标签嵌套其他标签、标签内有换行等),正则处理可能会有局限性,但针对你给出的示例字符串,这个正则完全够用啦~
内容的提问来源于stack exchange,提问作者Shoshin Nikita
相关产品推荐
相关产品推荐

