需要匹配以下字符串,要求去掉html标签,只剩下“数量"number"”。
< i class="help" data-content="数量(a>b>c>d)">数量"number" i > < / br >
我已经写了一个
/<\s*\/?\s*[a-zA-z_]([^>]*?["][^"]*["])*[^>"]*>/g

有没有更完美的匹配方案呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
完美解决啦!转自腾讯前端博客:http://imweb.io/topic/56e804e...
匹配HTML标签嘛,感觉很简单的样子,我们的第一反应可能是:
var pattern = /<[^>]+>/不过这样匹配可能存在的问题是:如果tag中含有>,上面的正则就不能正常匹配了。如:<input name=123 value=">" >虽然上面这种HTML的写法很少(sha)见(bi),但确实合法的。因此,简单的
<[^>]+>就不能用了,需要想个聪明点的办法。 我们先来看一下HTML Tag中有什么规则:<...>中能够出现引用文本(被单引号或双引号包裹的)
非引用形式的“其他文本”(包括除了
>和引号之外的任何字符)因此我们可以使用
/("[^"]*"|'[^']*')/来匹配。可以使用
/[^'">]/来匹配 现在可以得出匹配HTML Tag的正则表达式最终版!给这个正则表达式来点注释:
需要注意的是,我们不用"+"来修饰
[^'">]的原因是([^'">]+)*可能会带来灾难性的后果。匹配次数呈指数级增长。比如:对于简单的目标字符串helloworld,是星号会迭代10次,每一次迭代中[^'">]+匹配一个字符?还是星号迭代3次,内部的[^'">]+分别匹配5、2、3个字符?或者2、3、1、4个字符?还是其他情况?这样会把正则引擎搞疯掉的啦!看了下回答,都不完美吧,html标签内可以有<>这两个字符,其次还有双引号单引号规则,具体搜一下腾讯前端博客关于正则一文,手机码字不方便写代码。
提供个歪思路:仅限浏览器环境,node就算了,倒腾正则太费劲
/<.+?>/g试试
个人觉得可以试试这种方案:即不用正则表达式,把这段html代码append到页面中,页面会生成DOM结构,然后获取这些DOM结构的tagName,即可得到纯净的标签