繁体   English   中英

如何在JavaScript中使用正则表达式检测标记的子集?

[英]How do I detect a subset of tags with regexp in JavaScript?

我想在JavaScript字符串中检测是否有一些标签,而不是列表。 这意味着如果我的String中有不需要的标签,那么我会检测到它们。

我所做的是:

var expression = new RegExp("<[^(BR|SPAN|STRONG|STRIKE|EM|U|FONT)]*>", "gi");

if (expression.test(aString)) {
      // detection
}

但是此正则表达式似乎不起作用。

有人有主意吗?

您可能想要这样的东西:

var expression = new RegExp("<(BR|SPAN|STRONG|STRIKE|EM|U|FONT) ?[^>]*>", "gi");

...并反转您的测试(即,如果此测试为true,则发现错误的标签)

您尝试过的[^...]解决方案仅适用于字符字符集,不适用于字符串。

我以[^>]*>结尾,这意味着,“不是>任何量,然后是> ”,这样您还将捕获具有属性的元素。

编辑

正如MSalters指出的那样,看来我误解了您的问题。 您不想反转表达式,而是想做这样的事情

var expression = new RegExp("<(?!BR|SPAN|STRONG|STRIKE|EM|U|FONT) ?[^>]*>", "gi");

如果测试结果为true,则您的输入包含不在上面列表中的标签。

您可以颠倒想要的测试,但是这很难。

您要查找的大致是<([^BSEUF].*|U[^ >]+|B|B[^R].*|BR[^ >]+|E|E[^M].*|EM[^ >]+|||||) - <([^BSEUF].*|U[^ >]+|B|B[^R].*|BR[^ >]+|E|E[^M].*|EM[^ >]+|||||)去了与以S <([^BSEUF].*|U[^ >]+|B|B[^R].*|BR[^ >]+|E|E[^M].*|EM[^ >]+|||||)标签匹配的部分,但是您应该得到模式。 首先,我捕获了所有不以B,S,E,U或F开头的内容。接下来,我捕获了以U开头但在U之后有多余字符的任何内容(例如<UA> )。 第三种情况捕获<B> 第四种情况捕获<BA><BAA> 第五例捕获<E> 第六例抓到<BRA> 第7种情况捕获<EA><EAA> ,第8种情况捕获<EMA>

要完成此操作,您必须捕获<SPA><SA><SPAA><SPANA>等:标记有所不同,因为它们(1)简短,(2)在特定共享前缀之后不同,或(3)比可接受的标签更长。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM