Мне нужно найти строку, которая содержит "скрипт" с таким количеством символов до или после, и заключена в <
и >
. Я могу сделать это с помощью <*script.*>
Я также хочу сопоставлять только тогда, когда эта строка НЕ сопровождается <
Ближайший, к которому я пришел, до сих пор: (<*script.*>)([^=?<*]*)$
Тем не менее, это приведет к ошибке для чего-то вроде <script></script>
потому что за последним >
не следует <
(так что это не соответствует).
Как я могу проверить, соблюдается ли только первое >
<
или нет?
Например, <script> abc(); </script>
<script> abc(); </script>
MATCH
<< ScriPT >abc ("XXX");//<</ScriPT >
MATCH
<script></script>
НЕ СМЯТЬ
И, случай, над которым я все еще работаю: <script/script>
НЕ СМЯТЬ
Благодарю!
Вы были рядом с вашим Regex. Вам просто нужно было сделать свой первый запрос не жадным, используя? после второго *. Попробуйте это:
(?i)<*\s*script.*?>[^<]+<*[^>]+>
Существует приложение под названием Expresso, которое действительно помогает при проектировании строк Regex. Дать ему шанс.
Объяснение: Без? не-жадный аргумент, ваш второй * до первого> делает поиск полностью до конца строки и захватывает> в конце справа в этой точке. Ни один из других вещей в вашем запросе даже не рассматривался.
EDIT: Добавлен (? I) в начале для нечувствительности к регистру. Если вы хотите использовать не зависящее от JavaScript регулярное выражение javascript, вы бы сделали следующее:
/<*\s*script.*?>[^<]+<*[^>]+>/i
Я заметил, что у вас есть круглые скобки в вашем регулярном выражении, чтобы создавать группы, но вы конкретно не сказали, что пытаетесь захватить группы. Вы хотите захватить, что между <script>
и </script>
? Если это так, это будет:
/<*\s*script.*?>([^<]+)<*[^>]+>/i
Если я понимаю, что вы ищете, попробуйте:
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 <и убедитесь, что за ним следует <
Надеюсь, это поможет!
Это было бы лучше решено с помощью методов substring() и/или indexOf() JavaScript