Как обнаружить подмножество тегов с регулярным выражением в JavaScript? - PullRequest
0 голосов
/ 25 ноября 2010

Я хочу обнаружить в строке JavaScript, есть ли какие-либо теги, кроме списка, который у меня есть. Это означает, что если в моей строке есть нежелательные теги, я их обнаруживаю.

То, что я сделал, это:

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

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

Но это регулярное выражение, похоже, не работает ..

У кого-нибудь есть идея?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2010

Вы можете инвертировать тест, который хотите, но это чертовски сложно.

То, что вы хотите найти, примерно равно <([^BSEUF].*|U[^ >]+|B|B[^R].*|BR[^ >]+|E|E[^M].*|EM[^ >]+|||||) - я пропустил ту часть, которая соответствует тегам, начинающимся с S, но выдолжен получить образец.Сначала я ловлю все, что не начинается с B, S, E, U или F. Затем я ловлю все, что начинается с U, но имеет дополнительные символы после U (например, <UA>).Третий случай ловит <B>.4-й случай ловит <BA> и <BAA>.5-й случай ловит <E>.6-й случай ловит <BRA>.Седьмой случай ловит <EA> и <EAA>, восьмой случай ловит <EMA>.

Чтобы закончить это, вы должны поймать <SPA>, <SA>, <SPAA>, <SPANA> и т. Д.: Теги, которые различаются, потому что они (1) коротки, (2) различныпосле определенного общего префикса или (3) длиннее допустимого тега.

0 голосов
/ 25 ноября 2010

Вы, вероятно, хотите что-то вроде этого:

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 , то ваш ввод содержит теги, которых нет в списке выше.

...