2010-11-25 2 views
0

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

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

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

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

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

Кто-нибудь есть идеи?

ответ

0

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

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

... и обратного тест (то есть, если это тестов истинного то плохие теги найдены)

[^...] решения вы пробовали только работает на персонажах и устанавливает их, а не в строках.

Я заканчиваю на [^>]*>, что означает «любое количество чего-либо, что не является >, а затем >», так что вы также поймаете элементы с атрибутами.

EDIT

Как MSalters отметил, что, кажется, я неправильно понял ваш вопрос. Вы не хотите, чтобы изменить выражение, но, скорее, вы хотите сделать что-то вроде этого

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

Если он проверяет истинной тогда ваш вклад содержит тег, которые не в списке выше.

+0

Вы правы, с обратной проверкой ваше решение действительно хорошее. Большое спасибо за эту помощь! Хорошего дня ! – 2010-11-25 14:00:14

+0

Ehm, это белый список, и тест уже был «отменен». С вашей идеей, если я проверил ` Случайный текст`, `
` соответствует и проходит тест. Регулярное выражение _has_ для обнаружения подстроки ``. – MSalters 2010-11-25 14:18:03

0

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

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

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

Смежные вопросы