如何正则表达式替换内部少于3个字符的段落?

时间:2012-11-17 19:38:51

标签: javascript regex

基本上,我有这个:

str.replace(/<p><\/p>|<p>\.<\/p>/g);

尝试删除内部没有或少于3个字符的所有段落。正则表达式的第一部分正常工作,但像这样的段落:<p>.</p>不会被删除。对不起新手问题。

4 个答案:

答案 0 :(得分:1)

使用以下正则表达式。

<p>.{0,2}</p>
   ^ any character, 0 - 2 times (you said less than 3)

.转换为\.与文字.匹配。

以下是演示:http://jsfiddle.net/yQ5pu/1/

答案 1 :(得分:1)

试试这个正则表达式。 /<\s*(p|P)[^>]*>([^<.]{0,3}|\..{1,2}|.{1,2}\.)<\s*\/(p|P)\s*>/g 这将匹配<p>标记,不区分大小写,并且段落可以具有不同的属性。

示例:

var str = "<p>test</p><p>t</p><P>tes</P><p class=\"someclass\">s</p>< p >some long text</p>";
str.replace(/<\s*(p|P)[^>]*>([^<.]{0,3}|\..{1,2}|.{1,2}\.)<\s*\/(p|P)\s*>/g, '');

一个jsfiddle示例:http://jsfiddle.net/Tkwk5/3/

答案 2 :(得分:1)

您不需要使用标签,浏览器为所有这些提供API,运行速度更快,更不容易出现错误/漏洞,并且令人讨厌“为什么我的浏览器会冻结?”怪异。

var pTags = document.getElementsByTagName("p");

就是这样。页面中的每个标记现在都是变量pTags内的文档元素数组的一部分。

然后你可以检查任何给定的pTags [i]里面的内容,并通过以下方式将其删除:

pTags[i].parentNode.removeChild(pTags[i]);

当然,还有其他方法可以使用the DOM API

答案 3 :(得分:0)

<p>[0-9A-Za-z]{0,2}</p>

段落{0,2}之间的任何字符或数字少于3次出现。