Регулярное выражение, чтобы соответствовать только когда определенные символы следуют за строкой

1

Мне нужно найти строку, которая содержит "скрипт" с таким количеством символов до или после, и заключена в < и >. Я могу сделать это с помощью <*script.*>

Я также хочу сопоставлять только тогда, когда эта строка НЕ сопровождается < Ближайший, к которому я пришел, до сих пор: (<*script.*>)([^=?<*]*)$

Тем не менее, это приведет к ошибке для чего-то вроде <script></script> потому что за последним > не следует < (так что это не соответствует).

Как я могу проверить, соблюдается ли только первое > < или нет?

Например, <script> abc(); </script> <script> abc(); </script> MATCH

<< ScriPT >abc ("XXX");//<</ScriPT > MATCH

<script></script> НЕ СМЯТЬ

И, случай, над которым я все еще работаю: <script/script> НЕ СМЯТЬ

Благодарю!

Теги:

3 ответа

2
Лучший ответ

Вы были рядом с вашим Regex. Вам просто нужно было сделать свой первый запрос не жадным, используя? после второго *. Попробуйте это:

(?i)<*\s*script.*?>[^<]+<*[^>]+>

Существует приложение под названием Expresso, которое действительно помогает при проектировании строк Regex. Дать ему шанс.

Объяснение: Без? не-жадный аргумент, ваш второй * до первого> делает поиск полностью до конца строки и захватывает> в конце справа в этой точке. Ни один из других вещей в вашем запросе даже не рассматривался.

EDIT: Добавлен (? I) в начале для нечувствительности к регистру. Если вы хотите использовать не зависящее от JavaScript регулярное выражение javascript, вы бы сделали следующее:

/<*\s*script.*?>[^<]+<*[^>]+>/i

Я заметил, что у вас есть круглые скобки в вашем регулярном выражении, чтобы создавать группы, но вы конкретно не сказали, что пытаетесь захватить группы. Вы хотите захватить, что между <script> и </script>? Если это так, это будет:

/<*\s*script.*?>([^<]+)<*[^>]+>/i

  • 0
    Спасибо, SactoJosh! Я ценю ваше время! Я использовал regex101.com для быстрого тестирования.
1

Если я понимаю, что вы ищете, попробуйте:

regex = "<\s*script\s*>([^<]+)<"

Вот пример в Python:

import re

textlist = ["<script>show this</script>","<script></script>"]

regex = "<\s*script\s*>([^<]+)"

for text in textlist:
    thematch = re.search(regex, text, re.IGNORECASE)
    if thematch:
        print ("match found:")
        print (thematch.group(1))
    else:
        print ("no match sir!")

Объяснение: начните с <возможных возможных пространств, слова script, возможных пробелов, a> затем запишите все (как минимум 1) non <и убедитесь, что за ним следует <

Надеюсь, это поможет!

  • 0
    высоко ценится снайпер! Это тоже хорошо работает!
-1

Это было бы лучше решено с помощью методов substring() и/или indexOf() JavaScript

Ещё вопросы

Сообщество Overcoder
Наверх
Меню