我想在JavaScript字符串中检测是否有一些标签,而不是我拥有的列表。这意味着如果在我的String中有不合需要的标签,那么我会检测它们。
我所做的是:
var expression = new RegExp("<[^(BR|SPAN|STRONG|STRIKE|EM|U|FONT)]*>", "gi");
if (expression.test(aString)) {
// detection
}
但这个正则表达似乎不起作用..
有没有人有想法?
答案 0 :(得分:0)
你可能想要这样的东西:
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 ,那么您的输入包含不在上面列表中的标记。
答案 1 :(得分:0)
你可以反转你想要的测试,但这很难。
你想要找到的大致是<([^BSEUF].*|U[^ >]+|B|B[^R].*|BR[^ >]+|E|E[^M].*|EM[^ >]+|||||)
- 我遗漏了与S一起盯着标签的部分,但是你应该得到这种模式。首先,我捕获任何不以B,S,E,U或F开头的东西。接下来我抓住任何以U开头的东西,但在U之后有额外的字符(例如<UA>
)。第三种情况捕获<B>
。第四个案例捕获<BA>
和<BAA>
。第五个案例抓住了<E>
。第6个案例抓住了<BRA>
。第7个案例捕获<EA>
和<EAA>
,第8个案例捕获<EMA>
。
要完成此操作,您必须抓住<SPA>
,<SA>
,<SPAA>
,<SPANA>
等等:标签不同,因为它们是(1)简短,(2)在某个共享前缀之后不同,或(3)长于可接受的标签。