[英]How do I match XML tags multiple times with regexp in pure 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.